2016-11-11 17 views
8

Tôi có lớp sau:@JsonCreator 'Không thể tìm thấy bất động sản với tên tác giả' ngay cả với ignoreUnknown = true

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Topic { 

    private List<Comment> comments = new ArrayList<>(); 

    private List<User> users = new ArrayList<>(); 

    @JsonCreator 
    public Topic(@JsonProperty("success") boolean success, 
       @JsonProperty("response_comments") List<ResponseComment> responseComments, 
       @JsonProperty("response_users") List<ResponseUser> responseUsers) { 

     if (success) { 
      comments = Util.resolveComments(responseComments); 
      users = Util.resolveUsers(responseUsers); //some logic 
     } 

    } 

} 

Khi tôi cố gắng deserialize JSON, nó ném:

Không thể tìm thuộc tính người sáng tạo có tên 'nhận xét' (trong lớp com.test.domain.mapper.Topic)

Tôi không muốn điền comments từ json, chỉ trong hàm tạo từ pr operties. Tuy nhiên, nếu tôi viết thông số tiếp theo:

@JsonProperty("success") boolean success, 
@JsonProperty("response_comments") List<ResponseComment> responseComments, 
@JsonProperty("response_users") List<ResponseUser> responseUsers, 
@JsonProperty("comments") Object a, 
@JsonProperty("users") Object a 

tất cả các công trình.

+3

Tạo [mcve] giúp chúng tôi. Giảm thiểu mã, ví dụ: xóa "response_comments" và "response_users". Cung cấp JSON dưới dạng văn bản. Sau đó, cung cấp mã sử dụng Jackson, lý tưởng như một bài kiểm tra đơn vị. Điều này sẽ khiến tôi bắt đầu quan tâm. Nếu tôi cần tìm ra điều đó, tôi chỉ nỗ lực quá nhiều. –

+0

Tôi không thể sao chép, vui lòng hiển thị nội dung của đầu vào JSON –

+0

Tôi chỉ có thể tạo lại nếu tôi thêm getter và setter cho các trường 'comments' và' users' –

Trả lời

9

Sau nhiều giờ kiểm tra đơn vị và sao chép các lớp học, tôi đã tìm thấy giải pháp. Tôi không muốn thừa nhận điều đó, nhưng vấn đề trong số @AllArgsConstructor của Lombok. Tôi xin lỗi vì tôi đã không cung cấp rằng tôi sử dụng Lombok cả.
Nếu không có @AllArgsConstructor trong Topic tất cả đều hoạt động như mong đợi. Tuy nhiên, nó tồn tại trong các lớp khác ngay cả với @JsonCreator và hoạt động. Tôi xin lỗi vì thời gian của bạn.

1

Bạn nên thêm @JsonIgnoreProperties(ignoreUnknown = true) vào phương pháp tạo/Chủ đề contructor.

7

Sử dụng @AllArgsConstructor và jackson của lomback 2.8.7. Nâng cấp jackson lên 2.8.8 và khắc phục sự cố.

+1

Điều này giải quyết được vấn đề. Mọi thứ khác đều hoàn hảo. Chỉ nâng cấp Jackson đã giúp. Tôi đã sử dụng Jackson 2.8.7 –

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