2011-12-19 7 views
13

Jackson có Jersey hỗ trợ các lớp đa hình trên JSON không? Ví dụ:Đa hình trong JSON, Jersey và Jackson

Ví dụ: tôi có lớp cha và lớp con kế thừa từ đó. Và, giả sử tôi muốn sử dụng JSON để gửi & nhận cả cha lẫn mẹ qua HTTP.

public class Parent { 
... 
} 

public class Child extends Parent { 
... 
} 

Tôi đã nghĩ về loại triển khai:

@Consumes({ "application/json" }) // This method supposed to get a parent, enhance it and return it back 
    public @ResponseBody 
    Parent enhance(@RequestBody Parent parent) { 
    ... 
    } 

Câu hỏi: Nếu tôi cho chức năng này (thông qua JSON tất nhiên) một đối tượng trẻ em, nó sẽ làm việc? Các trường thành viên bổ sung của Trẻ có được tuần tự hóa không? Về cơ bản, tôi muốn biết các khung này có hỗ trợ tiêu thụ đa hình hay không & trả lời.

BTW, tôi đang làm việc với Spring MVC.

Trả lời

11

Jackson không hỗ trợ đa hình,

Trong lớp chú thích con mình với một cái tên:

@JsonTypeName("Child_Class") 
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "objectType") 
public class Child extends Parent{ 
.... 
} 

Trong mẹ bạn chỉ định các loại phụ:

@JsonSubTypes({ @JsonSubTypes.Type(value = Child.class), @JsonSubTypes.Type(value = SomeOther.class)}) 
public class Parent { 
    .... 
} 
+0

Great câu trả lời Usman. Tuy nhiên, bạn có thể muốn các @JsonTypeInfo trên phụ huynh thay vì trên các trẻ em. –

+0

Chúng ta cũng có thể làm theo cách đó, trong trường hợp này chúng ta sẽ phải đặt tên trong chú giải JsonSubTypes giống như câu trả lời ở đây: http://stackoverflow.com/questions/11798394/polymorphism-in-jackson-annotations-jsontypeinfo- cách sử dụng –

+0

Nó có hoạt động ở Jersey 2 (ví dụ 2.9.1) không? –