通知失败的未知属性

时间:2017-04-03 04:21:25

标签: java jackson

如果我在未知属性上禁用了失败:

new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

有没有办法在遇到未知属性时收到通知?这样我就可以输出日志消息了吗?

2 个答案:

答案 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的一些研究为您提供了答案。