2013-07-03 30 views
5

Tôi gặp vấn đề với JAXB/Jackson marshalling. Tôi có như một chú thíchJackson soái XMLAttribute nhận được giá trị "null"

@XmlAttribute(name = "private") 
protected Boolean mPrivate; 

và tôi hy vọng rằng thuộc tính này được vắng mặt nếu biến mPrivatenull.

Điều này làm việc tốt nếu đầu ra là XML. Nhưng nếu tôi chuyển sang JSON, bằng cách sử dụng Jackson, đầu ra là

xxxxxxx, "private":null, xxxxxxxx 

Bất kỳ ai cũng có ý tưởng tại sao điều này xảy ra và cách khắc phục? Cảm ơn trước.

+0

Xem câu hỏi này: http://stackoverflow.com/questions/11757487/how-to-tell-jackson-to-ignore-a-field-during-serialization-if-its-value-is- null –

Trả lời

5

Jackson tương thích với chú thích JAXB. Do đó JAXB không hỗ trợ các giá trị mặc định cho XmlAttributes vì ​​hành vi mặc định là để chúng thoát ra nếu giá trị là null khi tuần tự hóa thành XML.

Có một vài tùy chọn để đạt được điều này cho JSON.

  1. Bạn có thể chú thích POJO của bạn với @JsonSerialize (include = JsonSerialize.Inclusion.NON_NULL)

  2. Bạn có thể thiết lập các hành vi mặc định của ObjectMapper để loại trừ null-giá trị từ serialization. Bạn làm như vậy bằng cách gọi:

    setSerializationInclusion (Inclusion.NON_NULL);

    ... trên phiên bản ObjectMapper.

+0

Tôi phát hiện ra rằng @JsonSerialize có thể được thêm ở cấp lớp hoặc cấp trường/phương thức. Nếu được áp dụng ở cấp lớp, bạn vẫn có thể ghi đè ở cấp trường/phương thức. – Blaine

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