如何优雅地处理Jackson InvalidFormatException?
我目前正在通过以下方式与Jackson一起进行Java JSON反序列化:
我想处理和反序列化我从Web服务返回的JSON响应,并在Jackson的帮助下将响应转换为POJO。这在大多数情况下都工作正常,只要我得到的响应包含正确格式的JSON属性。
但是,由于Web服务和交付的数据超出了我的控制范围,因此我不能依赖数据始终采用正确的格式。
让我举个例子:
在我的POJO中,有一个字段,JSON响应包含一个保存日期时间字符串的属性。Jackson 将尝试解析字符串并将其转换为 .如果日期格式与日期格式 () 匹配,则一切正常。如果格式不同,我得到一个.java.util.Date
Date
ObjectMapper's
ObjectMapper.setDateFormat(...)
InvalidFormatException
现在的问题是,从服务发送的日期格式可能会有所不同。我可以获得格式为 的日期,但我也可以获得格式为的日期(仅标识单个月份而不是整个日期时间)。2014-11-02T00:00:00Z
2014-11
我知道,我可以编写一个自定义的反序列化程序,它可以处理这种确切的情况,并正确处理具有不同日期格式的日期字符串。但是,由于这只能解决 的问题,而不能解决潜在的其他数据类型的问题,因此我正在寻找一种更通用的方法。(例如,如果我期望双精度并收到字母数字字符串,会发生什么情况?Dates
我希望能够忽略所有发生的情况,并为相应的POJO字段定义默认值(如)。InvalidFormatException
null
这对我来说真的很有价值,如果尽管返回了无效的日期格式或任何其他情况,但JSON的其余部分仍然会反序列化到POJO中。InvalidFormatException
杰克逊有可能做到这一点吗?
感谢您阅读我的问题直到最后,我将不胜感激任何指向正确方向的指示。