Java@JsonProperty的详细讲解

发布时间:2023-05-19

一、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