如何在Drools决策表中为嵌套对象字段设置数据
在Drools决策表中更新嵌套对象字段的解决方案
前提检查
确保你的Java模型类具备标准的Getter/Setter方法:
SalesMobilityApiModel需包含getAddressProofModel()和setAddressProofModel(AddressProofModel)方法AddressProofModel需包含getDocumentCategory()、setDocumentCategory(String)、getDocumentType()、setDocumentType(String)等对应字段的访问器方法
场景1:嵌套对象已初始化(非null)
如果SalesMobilityApiModel中的addressProofModel已经被实例化,直接在决策表的**动作(Action)**列中通过链式调用或简化属性语法赋值即可:
决策表配置示例(链式调用)
| 条件(Condition) | 动作(Action) |
|---|---|
$sales: SalesMobilityApiModel(profile == "特定值") | $sales.getAddressProofModel().setDocumentCategory("category1"); |
$sales: SalesMobilityApiModel(profile == "另一值") | $sales.getAddressProofModel().setDocumentType("type2"); |
决策表配置示例(简化属性语法)
| 条件(Condition) | 动作(Action) |
|---|---|
$sales: SalesMobilityApiModel(profile == "特定值") | $sales.addressProofModel.documentCategory = "category1"; |
$sales: SalesMobilityApiModel(profile == "另一值") | $sales.addressProofModel.documentType = "type2"; |
场景2:嵌套对象未初始化(为null)
如果addressProofModel可能为null,必须先实例化对象再赋值,否则会抛出空指针异常。动作列需先创建实例并绑定到父对象:
决策表配置示例
| 条件(Condition) | 动作(Action) |
|---|---|
$sales: SalesMobilityApiModel(profile == "特定值", addressProofModel == null) | AddressProofModel addrProof = new AddressProofModel(); addrProof.setDocumentCategory("category1"); $sales.setAddressProofModel(addrProof); |
$sales: SalesMobilityApiModel(profile == "另一值", addressProofModel != null) | $sales.addressProofModel.documentType = "type2"; |
常见异常排查
- 空指针异常:大概率是
addressProofModel未初始化,需在动作中先实例化对象再赋值 - 属性访问失败:确认模型类的Getter/Setter严格遵循JavaBean规范(如
getAddressProofModel()、setDocumentCategory(String)),大小写不能出错 - 规则不触发:检查条件列的语法,比如
profile字段的匹配值是否和输入参数一致,变量名是否正确
内容的提问来源于stack exchange,提问作者Rashmi Patil
相关产品推荐
相关产品推荐

