2012-12-07 9 views
12

Tôi đang sử dụng phương thức readValue() của Jackson trên một trình ánh xạ đối tượng để đọc từ một tệp JSON và chuyển đổi nó thành đối tượng java của tôi.Jackson - Tài sản bắt buộc?

ví dụ:

mapperObject.readValue(node, MyTargetClass.class) 

Có bất kỳ chú thích nào tôi có thể đặt trên MyTargetClass để thực thi các thuộc tính bắt buộc không? Ví dụ, nếu tôi có một đối tượng JSON với thuộc tính ABC, DEF và GHI, và Json của tôi là sau

{ 
    "ABC" : "somevalue" 
    "DEF" : "someothervalue" 
} 

Tôi muốn nó thất bại bằng cách nào đó, và chỉ thành công trên readValue nếu nó chứa ABC, DEF và GHI.

Trả lời

12

Jackson không bao gồm chức năng xác thực và điều này là do thiết kế (tức là được coi là ngoài phạm vi). Nhưng những gì thường được sử dụng là thực hiện Bean Validation API. Điều tuyệt vời về việc này là tách giữa xử lý định dạng dữ liệu và logic xác thực. Đây là những khuôn khổ như sử dụng DropWizard; và đó là hướng JAX-RS (như Jersey) đang sử dụng JAX-RS 2.0.

-4

Có thể thư viện GSON của Google sẽ đáp ứng tốt hơn nhu cầu của bạn. Nhưng nó có yêu cầu ngược lại: bạn nên xác định đúng tất cả các cấu trúc.

+0

GSON cũng không có chức năng này. Xem https://code.google.com/p/google-gson/issues/detail?id=61 – Dmitry

8

Bạn có thể đánh dấu thuộc tính theo yêu cầu với chú thích @JsonProperty(required = true) và nó sẽ ném một JsonMappingException trong quá trình deserialization nếu thuộc tính bị thiếu hoặc null.

Chỉnh sửa: Tôi đã nhận được phiếu giảm giá cho điều này mà không có nhận xét. Tôi rất muốn biết tại sao, vì nó chính xác là điều đúng đắn.

+0

Xin chào. Có lẽ vì nó chưa hoạt động. Xem: http://stackoverflow.com/questions/18320731/jackson-jsonpropertyrequired-true-doesnt-throw-an-exception –

+1

@GunithDevasurendra Nó hoạt động trong các phiên bản gần đây của Jackson. – postfuturist

+0

Tôi đang sử dụng 2.6.5 và nó không hoạt động: ( –