@JsonCreator'找不到名称为'的创建者属性,即使是ignoreUnknown = true

时间:2016-11-11 10:57:10

标签: java jackson

我有以下课程:

@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时,它会抛出:

  

找不到名称为'comments'的创建者属性(在com.test.domain.mapper.Topic类中)

我不想在json中填充comments,只是在属性的构造函数中。但是,如果我写下一个参数:

@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 个答案:

答案 0 :(得分:14)

经过几个小时的单元测试和复制课程后,我找到了一个解决方案。我不想承认,但Lombok @AllArgsConstructor中的问题。对不起,我没有说明我一直使用龙目岛。在@AllArgsConstructor中没有Topic,所有工作都按预期进行。但是,即使使用@JsonCreator,它也存在于其他类中并且有效。我很抱歉你的时间。

答案 1 :(得分:11)

使用lomback&#39; @AllArgsConstructor和jackson 2.8.7。 将jackson升级到2.8.8并解决问题。

答案 2 :(得分:2)

在对此工作几个小时并确认@Feeco所经历的行为后,我能够通过将Lombok从v1.16.16升级到v1.16.20来解决此问题。

答案 3 :(得分:1)

您应该将@JsonIgnoreProperties(ignoreUnknown = true)添加到创建者方法/主题构造函数。