如何在Java中使用@JsonCreator注释反序列化JSON字符串?

该 @JsonProperty 注解可以用于指示属性名的JSON。此批注可用于构造函数 或工厂方法。该@JsonCreator在注释中是十分有用@JsonSetter注释不能使用。例如,不可变对象没有任何设置方法,因此它们需要将其初始值注入到构造函数中。

@JsonProperty-构造函数

示例

import com.fasterxml.jackson.annotation.*;

import java.io.IOException;

import com.fasterxml.jackson.databind.*;

public class JsonCreatorTest1 {

   public static void main(String[] args) throws IOException {

      ObjectMapper om = new ObjectMapper();

      String jsonString = "{\"id\":\"101\", \"fullname\":\"Ravi Chandra\", \"location\":\"Pune\"}";

      System.out.println("JSON: " + jsonString);

      Customer customer = om.readValue(jsonString, Customer.class);

      System.out.println(customer);

   }

}// Customer classclass Customer {

   private String id;

   private String name;

   private String address;

   public Customer() {

   }   @JsonCreator   public Customer(      @JsonProperty("id") String id,      @JsonProperty("fullname") String name,        @JsonProperty("location") String address) {

      this.id = id;

      this.name = name;

      this.address = address;

   }   @Override   public String toString() {

      return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";

   }

}

输出结果

JSON: {"id":"101", "fullname":"Ravi Chandra", "location":"Pune"}Customer [id=101, name=Ravi Chandra, address=Pune]


@JsonCreator-工厂方法

示例

import com.fasterxml.jackson.annotation.*;

import java.io.IOException;

import com.fasterxml.jackson.databind.*;

public class JsonCreatorTest2 {

   public static void main(String[] args) throws IOException {

      ObjectMapper mapper = new ObjectMapper();

      String jsonString = "{\"id\":\"102\", \"fullname\":\"Raja Ramesh\",          \"location\":\"Hyderabad\"}";

      System.out.println("JSON: " + jsonString);

      Customer customer = mapper.readValue(jsonString, Customer.class);

      System.out.println(customer);

   }

}// Customer classclass Customer {

   private String id;

   private String name;

   private String address;

   public Customer() {

   }   @JsonCreator   public static Customer createCustomer(

      @JsonProperty("id") String id,      @JsonProperty("fullname") String name,   @JsonProperty("location") String address) {

      Customer customer = new Customer();

      customer.id = id;

      customer.name = name;

      customer.address = address;

      return customer;

   }   @Override   public String toString() {

         return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";

   }

}

输出结果

JSON: {"id":"101", "fullname":"Raja Ramesh", "location":"Hyderabad"}Customer [id=102, name=Raja Ramesh, address=Hyderabad]

以上是 如何在Java中使用@JsonCreator注释反序列化JSON字符串? 的全部内容, 来源链接: utcz.com/z/335249.html

回到顶部