一、JsonProperty是什么
1、JsonProperty是Jackson库中的一个注解,是用于序列化和反序列化Java对象和JSON之间的转换的。通过Java对象的属性和JSON的key之间的映射,JsonProperty可以让我们自定义JSON生成的形式。 2、JsonProperty通常使用在Java Bean的get和set方法上,可以指定对应的JSON中的属性名。 3、JsonProperty可以用在属性、getter和setter方法上,也可以在类级别上使用,对整个类中所有的字段起作用。
public class User {
@JsonProperty("username")
private String name;
private String email;
@JsonCreator
public User(@JsonProperty("name") String name,
@JsonProperty("email") String email) {
this.name = name;
this.email = email;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
@JsonProperty("email")
public void setEmail(String email) {
this.email = email;
}
}
二、如何使用@JsonProperty
1、使用@JsonProperty
注解:
在Java Bean的get和set方法上使用@JsonProperty
,可以指定对应的JSON中的属性名:
public class User {
@JsonProperty("username")
private String name;
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
@JsonProperty("username")
public void setUsername(String username) {
this.name = username;
}
}
2、使用@JsonCreator
注解:
在构造函数的参数前使用@JsonProperty
可以指定对应的JSON中的属性名:
public class User {
private String name;
private String email;
@JsonCreator
public User(@JsonProperty("name") String name,
@JsonProperty("email") String email) {
this.name = name;
this.email = email;
}
}
3、在类级别上使用@JsonPropertyOrder
注解:
@JsonPropertyOrder
注解可以指定Java Bean转为JSON时属性的顺序:
@JsonPropertyOrder({ "name", "email" })
public class User {
private String name;
private String email;
}
三、JsonProperty的作用
1、可以自定义JSON生成的形式。
2、可以指定属性在生成JSON时的顺序。
3、可以指定Java Bean中属性与JSON中的key之间的映射关系。
4、可以使反序列化更加灵活方便,可以根据@JsonProperty("XXX")
的值进行反序列化。
四、JsonProperty示例
下面是一个简单的例子,通过@JsonProperty
注解,实现了Java对象到JSON的转换:
public class User {
@JsonProperty("username")
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
User user = new User("John", "john@example.com");
String json = mapper.writeValueAsString(user);
System.out.println(json);
User user2 = mapper.readValue(json, User.class);
System.out.println(user2.getName());
}
}
运行结果如下:
{"username":"John","email":"john@example.com"}
John