2012-04-25 29 views
6

Chúng tôi đang sử dụng JaxRS & Jackson để gửi dữ liệu cho khách hàng của chúng tôi. Vì máy khách là Javascript, chúng ta không thực sự cần phải gửi các giá trị rỗng hoặc các mảng trống nếu không có một giá trị hợp lệ cho thuộc tính đó (mà JaxRS thực hiện theo mặc định). Có cách nào để giái quyết vấn đề này không?Tối ưu hóa JaxRS/Jackson để loại trừ null, trống Danh sách, mảng

Ví dụ. JaxRS gửi này:

{"prop1":[],"prop2":null,"prop3":"foo"}

nơi chúng tôi có thể nhận được ngay với

{"prop3":"foo"}

Trả lời

8

Có nhiều cách để đạt được điều này, tùy thuộc; chú thích @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) là một cách. Hoặc, vì bạn cũng muốn thả các danh sách rỗng, mảng, thay đổi NON_NULL thành NON_EMPTY.

Cũng có thể định cấu hình này làm hành vi mặc định; ở Jackson 1.9:

mapper.setSerializationConfig(mapper.getSerializationConfig().withSerializationInclusion(
    JsonSerialize.Inclusion.NON_EMPTY)); 

và ở Jackson 2.0, cắn đơn giản:

mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY); 
+0

Lưu ý rằng các phương thức này chỉ là Jackson và không phải là nhà cung cấp độc lập sử dụng JAX-RS. – Zero3

+0

Có. Có ít cài đặt cấu hình được chuẩn hóa cho JAX-RS và không có chú thích lớp giá trị nào theo tôi biết. – StaxMan

2

Trước hết tính giảm từ JSON của bạn có thể dẫn đến sai sót hoặc mã không rõ ràng trên các mặt hàng - các phía máy khách phải kiểm tra xem một thuộc tính đã có tồn tại trước khi sử dụng nó hay không, nếu thuộc tính bị thiếu thì sẽ có lỗi JavaScript được báo cáo. Thứ nhàm chán.

Vì giao tiếp HTTP được nén, lợi ích tiềm năng từ việc loại bỏ thuộc tính dường như không đáng kể (tôi có thể sai, rõ ràng - tôi không biết ứng dụng của bạn). Yêu cầu GET có thể được lưu trữ hiệu quả, vì vậy một lý do nữa để tránh tối ưu hóa như vậy.

Bạn có thể tùy chỉnh tuần tự hóa các đối tượng Java thành JSON khi cần. Xem câu hỏi này How can I customize serialization of a list of JAXB objects to JSON? để được giải thích thêm về cách thực hiện việc này.

+1

Cảm ơn. Tôi là một chút ít trung thực về ý định của tôi. Thành thật mà nói, tôi bắt đầu với JSON tĩnh rất sạch trong khi phát triển ứng dụng khách, nhưng vì hầu hết các thuộc tính trong tệp là tùy chọn và hiếm khi được sử dụng, phiên bản do máy chủ tạo ra rất lớn và xấu xí. Bạn có lẽ đúng, rằng nó không phải là một vấn đề hiệu suất thực sự, nhưng nó là khó khăn hơn nhiều để đọc hơn nó có thể được. Cảm ơn các liên kết. –