如果我在未知属性上禁用了失败:
new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
有没有办法在遇到未知属性时收到通知?这样我就可以输出日志消息了吗?
答案 0 :(得分:2)
DeserializationProblemHandler
课似乎可以做你想要的。
它允许您实现此方法来处理未知属性:
boolean handleUnknownProperty(DeserializationContext ctxt,
JsonParser jp, JsonDeserializer<?> deserializer,
Object beanOrClass, String propertyName)
根据文件:
当JSON Map(&#34; Object&#34;)条目带有无法识别时调用的方法 遇到名字。
您可以使用DeserializationConfig.withHandler(DeserializationProblemHandler h)
方法在DeserializationConfig
对象上注册自定义处理程序。
答案 1 :(得分:1)
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
的Javadoc说:
确定是否遇到未知属性的功能(未映射到属性的属性,没有“任何setter”或可处理它的处理程序)应该导致失败(通过抛出JsonMappingException)。
此处的关键字是“处理程序”,因此在查找处理程序时,您会找到方法DeserializationConfig.withHandler(DeserializationProblemHandler h)
,DeserializationProblemHandler
的javadoc说:
这是可以在反序列化过程中遇到潜在可恢复问题时被调用(通过
DeserializationConfig
对象所有者ObjectMapper
)来调用的类。 处理程序可以尝试解决问题,抛出异常或什么都不做。
在您的情况下,您想记录问题,然后“什么都不做”。
因此,javadoc的一些研究为您提供了答案。