您的位置:首页 > Web前端 > JavaScript

[转]Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties

2017-08-22 15:52 281 查看
以前解析json用的惯的就是Google的gson了,用惯了基本就用它了,一直也没发现什么大问题,因为都是解析简单的json数据。但是最近学习springboot,要解析一个比较复杂的json数据。就照之前的用gsonformat自动生成实体类,让gson直接解析,本想着一切ok了,可是确报错了,刚开始以为gsonformat生成的类有错误,因为毕竟json数据较为复杂,于是多生成几次,可是还是不行。面对这样复杂的数据,我可不想手动写实体类,于是想着又换了自动生成实体类的工具,可是结果还是未能如愿。于是想着能从错误的日志中发现点什么,可是无奈gson没有打印具体的出错的地方,后来捣鼓了好久,想着不如换个解析工具吧。于是上网找了找,觉得Jackson不错,赶紧试用,发现还真不错,虽然也没能解析成功,但是它打印出了详细的出错信息,照着出错的信息改了马上就解析成功了。

说说出错的原因:平时解析json呢基本接口提供的json都是很明确的,所以用gson解析一般不会有啥大问题。但是此次情况不同,接口的数据我无法完全的预知,所以实体类字段有可能不完整。所以当返回的json数据里包含了实体类没有的字段时gson就有可能出错,但是对于这种情况用gson解析我是没找到相应的解决办法,如果谁知道麻烦告知一下,谢谢。

当然用Jackson解决就非常容易了,只需要在实体类上加上注解就可以。

@JsonIgnoreProperties(ignoreUnknown = true)
class ExtraBean {
private boolean is_museuser;

public boolean isIs_museuser() {
return is_museuser;
}

public void setIs_museuser(boolean is_museuser) {
this.is_museuser = is_museuser;
}
}

@JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。

@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:

@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不会被序列化和反序列化。

到此顺利解决。(还有Gson有类似的实现请告知一下,本人只知道gson转string忽略字段的方法,谢谢)

(原文地址:http://www.jianshu.com/p/f6884331d366)

同时参考了:

jackson反序列化时忽略不需要的字段

有时候,如果数据库表中增加一个字段,但返回的JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段没有在实体类中找到。解决办法很简单,在声明ObjectMapper之后,加上上述代码:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

(原文地址:http://www.cnblogs.com/davidwang456/p/5434071.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐