![](/img/trans.png)
[英]Java Drools : Cast object with possible null values to double & then compare
[英]How to compare nested JsonNode field values with Java object parameter values in DROOLS?
我一直在尝试根据一组配置值对请求对象执行一组规则。 以下是我正在尝试做的示例:
配置: config.json
{
"company1": {
"site1": {
"maxWeeklyWorkingHours": 40,
"rule2": [1, 3, 4],
},
"site2": {
"maxWeeklyWorkingHours": 40,
"rule2": [1, 3, 4],
}
},
"company2": {
"site1": {
"maxWeeklyWorkingHours": 40,
"rule2": [1, 3, 4],
},
"site2": {
"maxWeeklyWorkingHours": 40,
"rule2": [1, 3, 4],
}
}
}
请求类对象: policyDataToBeVerified
PolicyDataToBeVerified(company=company1, site=site1, workerWeeklyWorkingHours=39, isRequestValid=0)
我将 config.json 转换为 JsonNode 对象:configJson 并将 policyDataToBeVerified 和 configJson 都传递给 drools 工作内存。 以下是我尝试采用的方法来制定规则,但无论如何都失败了:
方法 1: drools.drl
rule "maxWorkingHours"
when
$configJson: JsonNode()
$policyData: PolicyDataToBeVerified(maximumWeeklyWorkingHours <= $configJson.get(company).get(site).get("workerWeeklyWorkingHours"))
then
$policyData.setIsRequestValid(true)
end
问题:我在 $configJson.get(company).get(site).get("workerWeeklyWorkingHours") 处收到空指针异常
方法 2:我什至尝试使用 configJSON 作为全局变量,但是,drools 不允许我使用 JsonNode 的 get 方法从 JSON 中获取嵌套字段
过去几天我一直在尝试解决我的问题,但没有任何效果。 我很乐意学习,即使我们可以从不同的角度看待这个问题并以不同的方式解决它,或者如果我们可以调试这个,无论什么都行。
谢谢
注意: IntellijIDEA 对 .drl 文件的 linting 不准确,因此请您不要依赖它。
为了更好地处理响应,我创建了一个 validateSlotsResponse 如下:
package com.example.demo;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Builder
public class ValidateSlotsResponse {
boolean isRequestValid;
List<String> comments;
}
我会将这个类的对象传递到 DROOLS 的工作内存中,并在 drools 程序中对其进行更新,然后将其用作验证的响应。
以下是我的 drools 文件中的规则,请确保您进行了正确的导入:
rule "fetchMaximumAllowedWeeklyWorkingHours"
when
$validateSlotsResponse: ValidateSlotsResponse()
$policyDataToBeVerified: PolicyDataToBeVerified()
$configJson: JsonNode()
$workingHoursAllowed:Integer() from $configJson.get($policyDataToBeVerified.getCompany()).get($policyDataToBeVerified.getSite()).get("maxWeeklyWorkingHours").intValue()
then
end
rule "maxWorkingHoursAccept" extends "fetchMaximumAllowedWeeklyWorkingHours"
when
eval($policyDataToBeVerified.workerWeeklyWorkingHours() <= $workingHoursAllowed)
then
$policyDataToBeVerified.setIsRequestValid(true);
$validateSlotsResponse.setRequestValid(true);
$validateSlotsResponse.setComments(new ArrayList<>(Arrays.asList("Worker allowed to work for "+$policyDataToBeVerified.getMaximumWeeklyWorkingHours() + " hours")));
end
rule "maxWorkingHoursReject" extends "fetchMaximumAllowedWeeklyWorkingHours"
when
eval($policyDataToBeVerified.workerWeeklyWorkingHours() > Integer.parseInt($workingHoursAllowed.toString()))
then
$policyDataToBeVerified.setIsRequestValid(false);
$validateSlotsResponse.setRequestValid(false);
$validateSlotsResponse.setComments(new ArrayList<>(Arrays.asList("Worker not allowed to work more than "+ $workingHoursAllowed + " hours")));
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.