You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools规则THEN块如何返回专属自定义对象作为响应(无直接kieSession权限)

Drools Workbench 规则THEN块插入自定义返回对象实现方案

实现步骤

  • 第一步:在Drools Workbench对应项目中创建专属自定义返回数据对象
    你可以新建一个例如名为ValidationResult的自定义类,添加你需要的返回字段,示例定义如下:

    import java.io.Serializable;
    
    public class ValidationResult implements Serializable {
        private String resultMessage;
        private Boolean isValid;
        // 可选字段:关联原请求标识,方便匹配请求和对应的返回结果
        private String requestId;
        // 请自行补充无参构造方法、所有字段的getter/setter方法
    }
    

    注意必须给对象实现Serializable接口、补充无参构造和字段的get/set方法,避免Workbench执行规则时出现序列化异常。

  • 第二步:修改规则文件,在THEN块插入自定义返回对象
    不需要修改原有WHEN块的匹配逻辑,仅需要在THEN块中实例化自定义对象,调用Drools内置的insert()方法将对象插入工作内存即可,全程不需要手动操作KieSession。修改后的规则示例如下:

    rule "validate Date"
    salience 100
    when
        $req : LiabilityRequestDto(expireAt before issueAt || issueAt before getNow())
    then
        // 实例化自定义返回对象
        ValidationResult result = new ValidationResult();
        result.setIsValid(false);
        result.setResultMessage("\n invalid date");
        // 可选:绑定原请求标识,方便后续匹配对应请求的返回结果
        result.setRequestId($req.getRequestId());
        // 调用Drools内置方法将对象插入工作内存
        insert(result);
    end
    
  • 第三步:在Workbench中配置结果查询逻辑获取返回对象
    因为无法直接访问KieSession,你可以在Workbench项目中新建查询(Query),用于提取工作内存中的自定义返回对象,示例查询代码如下:

    query "getValidationResult"
        $result : ValidationResult()
    end
    

    规则执行完成后,直接调用该查询即可拿到所有规则生成的自定义返回对象。

额外说明

  • 如果需要多规则共同修改同一返回对象,可以在WHEN块先匹配是否已经存在对应请求的ValidationResult,匹配到就直接修改该对象,没有匹配到再新建插入,避免生成多个冗余结果
  • 如果校验不通过需要阻止后续规则执行,可以在插入返回对象后调用drools.halt()方法终止规则流

内容的提问来源于stack exchange,提问作者Soheil Babadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:45:04