平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!
属性别名:@JsonProperty和@JSONField的区别?【图文教程】
温馨提示:
@JsonProperty和@JSONField注解都是为了解决obj转json字符串的时候,将java bean的属性名替换成目标属性名。常见于调用第三方接口的时候属性名不一致的场景。
两个注解的作用是相同的,只是来源不同,使用方式不同。下面将详解其异同!
1 @JsonProperty注解
@JsonProperty注解来源于jackson包,搭配ObjectMapper().writeValueAsString(实体类)方法使用,将实体类转换成json字符串。搭配ObjectMapper().readValue(字符串)方法使用,将json字符串转换成实体类。
1.1 引入jackson依赖包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>版本号</version>
</dependency>
1.2 测试json字符串与bean对象相互转换
实体类:User.java
import com.fasterxml.jackson.annotation.JsonProperty;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("JsonPropertyName")
private String name;
private String sex;
private Integer age;
}
测试方法:
@Test
public 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;
2 @JSONField
@JSONField是位于fastjson包里面,搭配JSON.toJSONString(实体类)方法使用,将实体类转换成json字符串。搭配JSON.parseObject(字符串,实体类.class)方法使用,将json字符串转换成实体类。
2.1 引入fastjson依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>版本号</version>
</dependency>
2.2 测试json字符串与bean对象相互转换
实体类:User.java
import com.alibaba.fastjson.annotation.JSONField;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JSONField(name="JSONFieldName")
private String name;
private String sex;
private Integer age;
}
测试方法:
@Test
public 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。
如果以上教程对您有帮助,为了不迷路,请关注一下吧~