@JsonCreator 'не удалось найти свойство creator с именем' даже при 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
        }

    }

}

когда я пытаюсь десериализовать JSON, он бросает:

не удалось найти свойство creator с именем "комментарии" (в классе com.тест.домен.картограф.Тема)

Я не хочу заполнять comments из json, только в конструкторе из свойств. Однако, если я напишу следующие парамы:

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

все работает.

4 ответов


после нескольких часов модульного тестирования и копирования классов я нашел решение. Я не хочу это признавать, но проблема в Ломбок ' s @AllArgsConstructor. Мне жаль, что я вообще не использовал Ломбок.
без @AllArgsConstructor на Topic все работает, как ожидалось. Однако он существует в других классах даже с @JsonCreator и работает. Прости, что отнял у тебя время.


используя @AllArgsConstructor ломбака и jackson 2.8.7. Обновите jackson до 2.8.8 и проблема решена.


вы должны добавить @JsonIgnoreProperties(ignoreUnknown = true) к методу создателя/теме contructor.


после работы над этим в течение нескольких часов и подтверждения поведения @Feeco, я смог решить эту проблему, обновив Lombok с v1.16.16 к v1.16.20.