有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在easyrules中编写一个规则,该规则接受一个字符串数组并使用contains检查事实字符串?

我正在使用表达式语言支持使用easy-rules以json格式编写规则

MVELRuleFactory ruleFactory = new MVELRuleFactory(new JsonRuleDefinitionReader())
Rules rules = ruleFactory.createRules(new FileReader("user-role-rule.json"))

2规则

  1. 部门包含“气体”和&;(标题包含“董事”|标题包含“经理”)

  2. 部门包含任何[“气体”、“ges”、“ips”、“csa”、“销售-云更新”]值

注:dept=“销售-云续费”或“销售-美国云续费”

用户角色规则。json

[
    {
        "name": "account",
        "description": "User in gas department having either Director or Manager title",
        "priority": 1,
        "condition": "user.getDept().toLowerCase().contains(\"gas\") && (user.getTitle().toLowerCase().contains(\"director\") || user.getTitle().toLowerCase().contains(\"manager\"))",
        "actions": [
          "user.setRole(\"account\");"
        ]
  },
  {
    "name": "account_common",
    "description": "User in CSM, IPS, CSA, SALES - CLOUD ENTERPRISE or GES department irrespective of any title",
    "priority": 1,
    "condition": "for (String dep in [\"gas\",\"ges\",\"ips\",\"csa\",\"sales - cloud renewal\"]) {user.getDept().toLowerCase().contains(dep)}",
    "actions": [
      "user.setRole(\"account\");"
    ]
  }
]

用户pojo类

class User {
    String userId
    String dept
    String title
    List<String> role

    User(String userId, String dept, String title) {
        this.userId = userId
        this.dept = dept
        this.title = title
        this.role = new ArrayList<String>()
    }
    //..ommitting getter setters
}

在这里,名为“account”的第一条规则很好,但在第二条规则中,我想使用字符串检查的列表dept属于[“gas”、“ges”、“ips”、“csa”、“sales-cloud renewal”]值中的任何一个

示例部门值为“销售-云更新”或“美国销售部云更新”

第2条规则中的例外

Exception in thread "main" [Error: expected : in foreach]
[Near : {... es - cloud renewal"]) {user.getDept().toLowerCase( ....}]
                                 ^

共 (1) 个答案

  1. # 1 楼答案

    如错误所述,您应该在foreach中使用冒号字符:,而不是in。只需写下第二条规则的条件如下:

    "condition": "for (String dep : [\"gcs\", ..., \"sales - cloud renewal\"]) {user.getDept().toLowerCase().contains(dep)}"
    

    你也可以选择the MVEL foreach documentation