1. 前端JSON数据
{
"conditions": [
{
"field": "age",
"operator": ">",
"value": 18
},
{
"field": "status",
"operator": "==",
"value": "active"
}
],
"logicalOperator": "AND"
}
2. 定义 Java 类
创建 Java 类来表示这些规则。
import java.util.List;
public class RuleConfig {
private List<Condition> conditions;
private String logicalOperator; // "AND" 或 "OR"
// Getters and Setters
public static class Condition {
private String field;
private String operator; // 比如 ">", "==", "<="
private Object value;
// Getters and Setters
}
}
3. 实现规则引擎
实现一个规则引擎来处理这些规则。以下是一个简单示例
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RuleEngine {
public boolean evaluate(RuleConfig ruleConfig, Map<String, Object> data) {
// 执行结果
boolean result = true;
for (RuleConfig.Condition condition : ruleConfig.getConditions()) {
boolean conditionResult = executeCondition(condition, data);
if (ruleConfig.getLogicalOperator().equalsIgnoreCase("AND")) {
if (!conditionResult) {
return false;
}
} else if (ruleConfig.getLogicalOperator().equalsIgnoreCase("OR")) {
if (conditionResult) {
return true;
}
}
}
return result;
}
private boolean executeCondition(RuleConfig.Condition condition, Map<String, Object> data) {
Object fieldValue = data.get(condition.getField());
if (fieldValue == null) {
return false;
}
switch (condition.getOperator()) {
case "==":
return fieldValue.equals(condition.getValue());
case ">":
if (fieldValue instanceof Comparable) {
return ((Comparable) fieldValue).compareTo(condition.getValue()) > 0;
}
break;
case "<":
if (fieldValue instanceof Comparable) {
return ((Comparable) fieldValue).compareTo(condition.getValue()) < 0;
}
break;
// 添加更多的运算符支持
}
return false;
}
}
4. 使用示例
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String jsonRule = "{ \"conditionList\": [{\"field\": \"age\", \"operator\": \">\", \"value\": 18}, {\"field\": \"status\", \"operator\": \"=\", \"value\": \"active\"}], \"logicalOperator\": \"AND\" }";
RuleConfigVO ruleConfig = JSON.parseObject(jsonRule, RuleConfigVO.class);
Map<String, Object> data = new HashMap<>();
data.put("age", 20);
data.put("status", "active");
RuleEngineService ruleEngine = new RuleEngineServiceImpl();
boolean result = ruleEngine.execute(ruleConfig, data);
System.out.println("Rule execute result: " + result); // 应该输出 true
}
}