Drools规则检查HashMap键并更新值:运行无错但JSON值未变更
问题分析与解决
核心原因及修复方案
1. 规则逻辑优化与关键修复
原规则存在条件冗余,且未通知Drools工作内存对象变更,导致修改无法被正确同步。以下是修正后的规则:
rule "Update HashMap Value" when // 直接匹配包含目标key的Mobi_Subset对象 $mobiSubset: Mobi_Subset(fileNameMappings containsKey "templateUUID") // 获取该对象持有的Map $fileNameMappings: Map() from $mobiSubset.fileNameMappings then $fileNameMappings.put("templateUUID", "metadata.json"); // 通知Drools工作内存:Mobi_Subset对象已更新 update($mobiSubset); end
2. 关键说明
Drools不会自动感知集合(如HashMap)内部的修改操作,因此在修改Map后必须调用update($mobiSubset),让工作内存重新识别对象状态变化,确保修改能被后续流程(如JSON序列化)感知。
3. 额外排查点
如果修改后仍不生效,请确认:
- JSON反序列化为Mobi_Subset时,
fileNameMappings被解析为可变的HashMap(而非不可变Map实现)。 - 规则执行完成后,是将更新后的Mobi_Subset对象重新序列化为JSON,而非复用原始JSON数据。
内容的提问来源于stack exchange,提问作者user1111880
相关产品推荐
相关产品推荐

