当杰克逊序列化程序和反序列化程序使用不同的命名时,response.readEntity()抛出UnrecognizedPropertyException

时间:2018-08-09 11:19:33

标签: jackson

我有一个单元测试,我想检查在端点中返回的响应。我的问题是,当我打电话给Response#readEntity(MyPojo.class)时,得到UnrecognizedPropertyException的原因可能是我很清楚的,在我的POJO类中:

public class Answer {
    @NotNull
    private QuestionNames questionId;

    @NotNull
    private Integer optionId;

    @JsonProperty("optionId")
    public void setOptionId(@NotNull Integer optionId) {
        this.optionId = optionId;
    }

    @NotNull
    @JsonProperty("value")
    public Integer getValue() {
        return this.optionId;
    }

    @NotNull
    public QuestionNames getQuestionId() {
        return questionId;
    }

    public void setQuestionId(@NotNull QuestionNames questionId) {
        this.questionId = questionId;
    }
}

之所以这样,是因为我必须将答案返回给optionId命名为value的客户端,但是当他们发送带有值的新答案时,他们将其称为{{1 }}。现在,我只需创建两个具有相同字段的POJO即可轻松解决问题,只是值字段的名称不同,因此基本上只需:

optionId

,然后在我的public class AnswerIn { private QuestionNames questionId; private Integer optionId; } public class AnswerOut { private QuestionNames questionId; private Integer value; } 端点中使用AnswerOut,在GET中使用AnswerIn,但这似乎很笨拙。

我已经手动测试了我的解决方案,考虑到将如何使用它,效果很好。但是,当我编写UnitTest时,它失败了,因为它无法准备好响应实体正确获取POST

使用Unrecognized field "value" (class com.test.Answer), not marked as ignorable (2 known properties: "optionId", "questionId"])jackson 2.7.8

0 个答案:

没有答案