And*_*aly 11 java json jackson
我目前正在努力与Jackson进行Java JSON反序列化,方法如下:
我想处理和反序列化我从Web服务返回的JSON响应,并在Jackson的帮助下将响应转换为POJO.只要我得到的响应包含正确格式的JSON属性,这在大多数情况下都可以正常工作.
但是,由于Web服务和交付的数据不受我的控制,我不能依赖于始终采用正确格式的数据.
让我给你举个例子:
在我的POJO中,有一个java.util.Date
字段,JSON响应包含一个包含日期时间字符串的属性.杰克逊将尝试解析字符串并将其转换为Date
.如果日期格式与ObjectMapper's
dateformat(ObjectMapper.setDateFormat(...)
)匹配,一切都很好.如果格式不同,我会得到一个InvalidFormatException
.
现在的问题是,从服务发送的dateformat 可能不同.我可以获得格式化的日期2014-11-02T00:00:00Z
,但我也可以将日期格式化为2014-11
(仅标识一个月而不是整个日期时间).
我知道,我可以编写一个自定义反序列化器,它可以处理这个确切的情况并正确处理具有不同日期格式的datetring.但由于这只会解决问题Dates
,但不会解决潜在的其他数据类型,我正在寻找更通用的方法.(例如,如果我期望Double并获得字母数字字符串会发生什么?)
我想要的是有可能忽略发生的所有情况InvalidFormatException
并定义null
相应POJO字段的默认值(如).
这将是对我来说真正有价值的,如果任凭一个无效的日期格式返回或任何其他InvalidFormatException
情况的发生,在JSON的其余部分将仍然被反序列化到POJO.
这对杰克逊来说有什么可能吗?
感谢您阅读我的问题,直到最后,我将不胜感激任何指示正确的方向.
不确定这是否是最佳实践,我对杰克逊几乎没有经验。
您可以将 a 添加DeserializationProblemHandler
到ObjectMapper
以指定当反序列化器遇到奇怪的字符串或奇怪的数字时会发生什么。
在您的情况下,您可以设置处理程序,以便在遇到无法识别的格式时,而不是抛出InvalidFormatException
,它只返回 null:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addHandler(new DeserializationProblemHandler() {
@Override
public Object handleWeirdStringValue(DeserializationContext ctxt, Class<?> targetType, String valueToConvert, String failureMsg) throws IOException {
return null;
}
@Override
public Object handleWeirdNumberValue(DeserializationContext ctxt, Class<?> targetType, Number valueToConvert, String failureMsg) throws IOException {
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1867 次 |
最近记录: |