2015-04-20 34 views
8

Tôi có một thông báo json đơn giản với một số trường và muốn ánh xạ nó tới một đối tượng java bằng cách sử dụng spring-web.Làm thế nào để ánh xạ các trường JSON thành các thuộc tính đối tượng tùy chỉnh?

Sự cố: các trường lớp mục tiêu của tôi được đặt tên khác với phản hồi int json. Làm thế nào tôi có thể ánh xạ chúng vào đối tượng mà không cần phải đổi tên các trường trong java?

Có một số chú thích có thể được đặt ở đây không?

{ 
    "message":"ok" 
} 

public class JsonEntity { 
    //how to map the "message" json to this property? 
    private String value; 
} 

RestTemplate rest = new RestTemplate(); 
rest.getForObject(url, JsonEntity.class); 
+3

'@ JsonProperty' là những gì bạn đang tìm kiếm. –

Trả lời

8

Để ánh xạ một tài sản JSON để một đối tượng java với một tên sử dụng khác nhau @JsonProperty annotation, và mã của bạn sẽ là:

public class JsonEntity { 
    @JsonProperty(value="message") 
    private String value; 
} 
2

Hãy thử điều này:

@JsonProperty("message") 
private String value; 
1

Trong trường hợp bạn đã quen thuộc nó, bạn cũng có thể sử dụng chú thích Jaxb để soái/unmarshal json bằng cách sử dụng Jackson

@XmlRootElement 
public class JsonEntity { 
    @XmlElement(name = "message") 
    private String value; 
} 

Nhưng bạn phải khởi tạo ngữ cảnh Jackson phù hợp. Dưới đây là một ví dụ làm thế nào để khởi tạo bối cảnh Jackson với chú thích Jaxb.

ObjectMapper mapper = new ObjectMapper(); 

AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); 
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector); 
mapper.getSerializationConfig().setAnnotationIntrospector(introspector); 
Các vấn đề liên quan