Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách deserialize chuỗi JSON sử dụng annotation @JsonCreator trong Java


Annotation @JsonProperty chỉ định tên property trong JSON, dùng cho constructor hoặc factory method. Annotation @JsonCreator hữu ích khi @JsonSetter không dùng được, ví dụ object immutable không có setter, cần inject giá trị khởi tạo qua constructor.

@JsonProperty - Constructor

Ví dụ

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 class class 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 + "]";    } }

Kết quả

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


@JsonCreator - Factory Method

Ví dụ

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 class class 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 + "]";    } }

Kết quả

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