2015-03-11 14 views
5

Tôi đang sử dụng Jackson để chuyển đổi một chuỗi Json lớn thành các lớp khác nhau và các lớp con.đa hình hóa deserialization của JSON với jackson, loại tài sản trở thành "null"

Tôi có một danh sách các đối tượng, mỗi đối tượng chứa một đối tượng nút, một đối tượng kết quả cuối cùng và một mảng con. Mảng con chứa một danh sách các đối tượng với chính xác cùng một thiết lập. Điều này tiếp tục cho 3 hoặc 4 lớp.

Nút của mỗi lớp là một phân lớp khác, tất cả đều mở rộng từ một siêu lớp nút. tôi đã chú thích các nút cha với chú thích như sau:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class, name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4"), 
    @JsonSubTypes.Type(value = Type5ResponseDto.class, name = "Type5") 
}) 

Điều này dường như làm việc, vì tất cả các lớp con có được ánh xạ.

Tuy nhiên, điều này bằng cách nào đó dẫn đến thuộc tính "loại" được đặt thành rỗng.

Bất kỳ ý tưởng nào về lý do điều này xảy ra?

Trả lời

7

tôi cần phải thêm visible=true cho các loại tài sản để xuất hiện:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type",visible = true) 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class,name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4") 
}) 
+0

Phiên bản nào của Jackson không câu trả lời này áp dụng đối với? Tôi đang sử dụng 1.9.9 và tôi không có các tùy chọn đó và tôi đang gặp sự cố chính xác này. – TheIcemanCometh

+0

2.5.1 @TheIcemanCometh –

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