2011-04-29 27 views
11

Tôi có các loại đa hình và deserializing từ JSON đến POJO hoạt động. Tôi đã theo tài liệu here, trên thực tế. Khi tuần tự hóa các POJO thành JSON, tôi nhận được một thuộc tính không mong muốn, cụ thể là tên kiểu logic.Làm cách nào để ngăn chặn Jackson tuần tự hóa thuộc tính chú thích của một loại đa hình?

import static org.codehaus.jackson.annotate.JsonTypeInfo.*; 

@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="type") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value=Dog.class, name="dog"), 
    @JsonSubTypes.Type(value=Cat.class, name="cat") 
})  
public class Animal { ... } 

public class Dog extends Animal { ... } 
public class Cat extends Animal { ... } 

Khi Jackson nối tiếp thành JSON, nó cung cấp thông tin loại mà tôi không muốn hiển thị.

{"type":"dog", ... } 
{"type":"cat", ... } 

Tôi có thể ngăn chặn điều này bằng cách nào đó không? Tôi chỉ muốn bỏ qua type khi deserializing.

+1

Bạn nói, "Tôi chỉ muốn bỏ qua loại khi deserializing." Thay vào đó, bạn có nghĩa là "Tôi chỉ muốn bỏ qua loại khi tuần tự hóa."? –

+2

Tôi ấn tượng vì bạn đã tìm ra được điều này nhiều từ tài liệu. Không có một ví dụ sử dụng duy nhất của '@ JsonSubTypes' trên trang wiki đó. –

Trả lời

5

Một giải pháp đơn giản là chỉ cần di chuyển các cấu hình @JsonTypeInfo@JsonSubTypes sang MixIn và sau đó chỉ đăng ký MixIn để hủy tuần tự hóa.

mapper.getDeserializationConfig().addMixInAnnotations(MyClass.class, MyMixIn.class)

+3

Bạn có thể vui lòng chia sẻ mã giải pháp đã giải quyết được sự cố của bạn không. – Ketan

+0

http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html – jmcmahon

0

này đã cho tôi một thời gian dài để giải quyết vì vậy tôi nghĩ rằng tôi muốn chia sẻ.

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, 
visible = false, property = "type") 

visible=false đảm bảo rằng nếu tài sản type tồn tại trên lớp, nó sẽ không được dân cư với giá trị của type trong deserialization.

include = JsonTypeInfo.As.EXISTING_PROPERTY ra lệnh rằng nếu thuộc tính type tồn tại, hãy sử dụng giá trị đó trong quá trình tuần tự hóa nếu không thì không làm gì cả.

Các vấn đề liên quan