2016-05-11 16 views
5

Tôi đã tìm kiếm Stack Overflow trước khi đăng bài, nhưng không có giải pháp cho Jackson.

Dưới đây là một phản ứng máy chủ:
Jackson desrialize khi JsonProperty đôi khi mảng và đôi khi một đối tượng duy nhất

{ 
    "ok": true, 
    "result": [ 
    { 
     "update_id": 489881731, 
     //rest 
    }, 
    { 
     "update_id": 489881732, 
     //rest 
    } 
    ] 
} 

Như bạn thấy tài sản "result" là một mảng.

Bây giờ đây là một phản ứng:

{ 
    "ok": true, 
    "result": { 
    "id": 211948704, 
    "first_name": "ربات ادمین‌های تلگرام", 
    "username": "tgAdminsBot" 
    } 
} 

Đây "result" là một đối tượng duy nhất.

Đây là lớp học của tôi mà tôi muốn deserialize nội dung với nó. Tôi đã viết một deserializer tùy chỉnh cho TObject của khóa học:.?

public class Result 
{ 
    private TObject[] result; 
    private boolean ok; 

    public void setOk (boolean ok) {//code} 

    public void setResult (TObject[] result) {//code} 


    public TObject[] getResult() {//code} 

    public boolean getOk(){//code} 
} 

Vì vậy, tôi giả định trong lớp học của tôi rằng "result" là một mảng của TObject s Bây giờ những gì tôi có thể làm Đang sử dụng @JsonProperty("result") cho hai lĩnh vực mà một là một mảng của TObject s và một là một đơn TObject OK?

Nếu không gì khác tôi có thể làm gì?

+0

có thể điều này có thể giúp 'DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY' http://stackoverflow.com/questions/17003823/make-jackson-interpret-single-json-object-as-array-with- một phần tử/17004714 # 17004714 hoặc điều này: http://stackoverflow.com/search?q = DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY – varren

+0

Làm việc hoàn hảo! Cảm ơn! –

+0

@varren, vui lòng đăng câu trả lời để câu hỏi có thể được đóng đúng cách, cảm ơn –

Trả lời

5

Nếu bạn kích hoạt.210 cả

{"result": []}

{"result": {}} thể được phân tích như

class Result{ 
    List result; 
} 

Documentation link

Tính năng xác định cho dù đó là chấp nhận được để ép buộc phi mảng (trong JSON) giá trị làm việc với bộ sưu tập Java (mảng, loại java.util.Collection). Nếu được bật, bộ sưu tập deserializers sẽ cố gắng xử lý các giá trị không phải mảng như thể chúng đã "ẩn" xung quanh mảng JSON . Tính năng này có nghĩa là được sử dụng cho các lý do tương thích/tương thích, để làm việc với các gói (chẳng hạn như chuyển đổi XML sang JSON) bỏ qua mảng JSON trong trường hợp có chỉ là một phần tử trong mảng. Tính năng được tắt theo mặc định.

Demo làm thế nào để sử dụng nó cho jsons đầu vào OP và POJO:

ObjectMapper mapper = new ObjectMapper() 
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 
Result result = mapper.readValue(Result.class; 

có thể được sử dụng với @JsonFormat trên lớp hoặc trường nếu bạn không thích phiên bản mapper vì một lý do

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 

PS. Các câu hỏi SO khác về vấn đề này: LINK

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