上游接口新增了字段没通知,消费方立刻报 UnrecognizedPropertyException,提示某个字段 not marked as ignorable,整条消息处理失败。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
objectMapper.disable( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); @JsonIgnoreProperties(ignoreUnknown = true)
ObjectMapper 默认开启 FAIL_ON_UNKNOWN_PROPERTIES,DTO 里没有的字段一律当错误,对方一加字段就崩。这一点先确认清楚,后面就不用反复试。
「未知字段」这类改动最怕改一半,回滚脚本先准备好,再动生产。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,关掉 FAIL_ON_UNKNOWN_PROPERTIES;给 DTO 加忽略未知字段的注解;把字段变更纳入联调检查项。
改完照着核一遍,带新字段的报文能正常反序列化,已有字段的值不变。
