本文共 2474 字,大约阅读时间需要 8 分钟。
平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤; 优秀也就两个字: 你和我。 跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信公众号【 IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!
温馨提示:
@JsonProperty和@JSONField注解都是为了解决obj转json字符串的时候,将java bean的属性名替换成目标属性名。常见于调用第三方接口的时候属性名不一致的场景。
两个注解的作用是相同的,只是来源不同,使用方式不同。下面将详解其异同!
@JsonProperty注解来源于jackson包,搭配ObjectMapper().writeValueAsString(实体类)方法使用,将实体类转换成json字符串。搭配ObjectMapper().readValue(字符串)方法使用,将json字符串转换成实体类。
com.fasterxml.jackson.core jackson-databind 版本号
实体类:User.java
import com.fasterxml.jackson.annotation.JsonProperty;@Data@NoArgsConstructor@AllArgsConstructorpublic class User { @JsonProperty("JsonPropertyName") private String name; private String sex; private Integer age;}
测试方法:
@Testpublic void testJsonProperty() throws IOException{ //bean ---> json User user=new User("zhangsan","man",22); System.out.println(new ObjectMapper().writeValueAsString(user)); //json ---> bean String str="{\"sex\":\"man\",\"age\":22,\"JsonPropertyName\":\"zhangsan\"}"; System.out.println(new ObjectMapper().readValue(str, User.class).toString());}
测试结果:
{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}User [name=zhangsan, sex=man, age=22]
可见,bean转成json字符串后,@JsonProperty注解的bean属性名已经替换成了指定属性名:JsonPropertyName;
json字符串转成bean后,@JsonProperty注解指定的属性名已经替换成了bean属性名:name;
@JSONField是位于fastjson包里面,搭配JSON.toJSONString(实体类)方法使用,将实体类转换成json字符串。搭配JSON.parseObject(字符串,实体类.class)方法使用,将json字符串转换成实体类。
com.alibaba fastjson 版本号
实体类:User.java
import com.alibaba.fastjson.annotation.JSONField;@Data@NoArgsConstructor@AllArgsConstructorpublic class User { @JSONField(name="JSONFieldName") private String name; private String sex; private Integer age;}
测试方法:
@Testpublic void testSONField(){ //bean ---> json User user=new User("zhangsan","man",22); System.out.println(JSON.toJSONString(user)); //json ---> bean String str="{\"JSONFieldName\":\"zhangsan\",\"age\":22,\"sex\":\"man\"}"; System.out.println(JSON.parseObject(str, User.class).toString()); }
测试结果:
{"JSONFieldName":"zhangsan","age":22,"sex":"man"}User [name=zhangsan, sex=man, age=22]
可见,bean转成json字符串后,@JSONField注解的bean属性名已经替换成了指定属性名:JSONFieldName;
json字符串转成bean后,@JSONField注解指定的属性名已经替换成了bean属性名:name;
测试结果同@JsonProperty。
如果以上教程对您有帮助,为了不迷路,请关注一下吧~
转载地址:http://mupgf.baihongyu.com/