2012-01-17 26 views
18

tôi có một đối tượng được curently được đăng để:Làm thế nào để không gửi một bộ sưu tập trống trong jackson

{ 
    "label" : "label", 
    "proxyIds" : [ ], 
    "childIds" : [ 161, 204, 206, 303, 311 ], 
    "actionIds" : [ 157, 202 ], 
} 

Đó proxyIds là một sản phẩm nào (không null) bộ sưu tập trong đối tượng java.

Làm cách nào để định cấu hình Jackson không bao gồm đối tượng đó trong json?

Tôi muốn hành vi tương tự như bộ sưu tập "chưa được mở" trong xml/xà phòng nếu bộ sưu tập trống không được bao gồm. Tôi không cần phải phân biệt giữa bộ sưu tập rỗng và rỗng và muốn giảm kích thước của tải trọng json.

Trả lời

13

Đây có thể là một cảnh quay dài nhưng cách sử dụng Bao gồm và xác định NON_DEFAULT làm thuộc tính bao gồm. Các tài liệu nói:

"Giá trị chỉ ra rằng chỉ các thuộc tính có giá trị khác với cài đặt mặc định (có nghĩa là giá trị mà chúng có khi Bean được tạo bằng hàm tạo không đối số) được đưa vào."

Vì vậy, nếu giá trị mặc định là một mảng trống, nó sẽ bỏ qua nó.

Cái gì như:

ObjectMapper mapper = new ObjectMapper(); 
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_DEFAULT); 


public class Test { 
    String[] array = { }; 
    .... 
} 

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/annotate/JsonSerialize.Inclusion.html

+0

'Chuỗi [] array =" ";' không phải là mã hợp lệ - bạn muốn viết gì? –

+0

Cố định, về cơ bản muốn đặt giá trị mặc định thành mảng trống. –

+0

lưu ý, kể từ jackson 2.0, cách để làm điều này là 'mapper.setSerializationInclusion (Bao gồm.NON_DEFAULT);' –

34

Kể từ khi Jackson 2.0.0 (25-Mar-2012), bạn cũng có thể sử dụng để kiểm soát @JsonInclude annotation này trên một sân mỗi hoặc mỗi lớp nền tảng.

public class MyObject { 

    @JsonInclude(Include.NON_EMPTY) 
    private List<Integer> proxyIds; 

    ... 
} 
+0

IMHO đây phải là câu trả lời đúng. Nhưng tôi thấy đáng nói rằng chú thích này cũng có thể được sử dụng trên một lớp. Trong trường hợp này, nó áp dụng cho tất cả các trường. – Simon

+2

Chỉ cần một lưu ý, NON_DEFAULT là một tập con của NON_EMPTY, cái nào bạn muốn tùy thuộc vào nhu cầu của bạn. Nếu tôi nhớ chính xác NON_EMPTY cũng loại bỏ các thuộc tính chuỗi rỗng ngoài mảng trong khi NON_DEFAULT thì không. – molholm

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