修改字段校验逻辑后输入有效destinationField仍报错问题咨询
故障原因与修复方案
根因定位
- 变量生命周期过长:你将
invalidDestinationHashSet定义在校验逻辑外层,属于长生命周期变量,之前输入无效值时存入的记录不会自动清空,后续哪怕输入全为有效值,集合中仍残留旧的无效数据,会持续触发报错逻辑。 - 逻辑与原始实现不一致:原始代码仅校验
configTypeBuilder.destinationField单个字段,修改后的代码遍历的是destinationFieldList,如果该列表没有和最新输入同步更新,也会残留历史无效值导致误报。
修复方案
将HashSet的定义移到校验逻辑内部,每次执行校验都创建新的空集合,避免历史数据残留;同时确认遍历的列表是当前最新的输入值集合。
修复后代码如下:
if (!isNullOrEmpty(configTypeBuilder.destinationField, RULE_CRITERIA_CONFIG_TYPE_BUILDER_DESTINATION_FIELD_PATH)) { // 每次校验都初始化新的空集合,清除旧数据影响 val invalidDestination = hashSetOf<String>() // 请确认此处destinationFieldList为当前最新的输入值集合,若仅需校验单个字段可调整对应逻辑 for (destinationField in destinationFieldList) { if (!ruleAttributes.contains(destinationField)) { invalidDestination.add(destinationField) } } if (invalidDestination.isNotEmpty()) { addValidationError( "$RULE_CRITERIA_CONFIG_TYPE_BUILDER_DESTINATION_FIELD_PATH $NOT_EXIST_CONSTRAINT", DESTINATION, "$ADD_TAX_ENGINE_ATTRIBUTE_FIELDS $invalidDestination" ) } }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

