【发布时间】:2017-01-10 11:00:43
【问题描述】:
在 REST api 上,我收到一个映射到 Java 对象的 Json:
@RequestMapping(value = "/example", method = RequestMethod.POST)
public @ResponseBody
ReturnObject doReturn(@RequestBody ProblemObject requestBody)
对象很简单:
public class ProblemObject implements Serializable {
private String field1;
private String field2;
public ProblemObject(String field2) {
this.field2 = field2;
}
public ProblemObject(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
}
问题是 Jackson 尝试反序列化甚至是格式错误的 JSON,但结果不太好,例如它接受:
"field1": "test",
"field2": "test"
}
注意没有左大括号。这会导致对象与值为“field2”且 field2 为空的 field1 进行映射。
它也不接受逗号,结果更差。
目前我能想到的唯一选择是实现自定义反序列化器,但这不是最佳的恕我直言。
有没有办法让杰克逊更严格?
【问题讨论】:
-
我的建议是使用某种 JSON 验证器,如果有效性测试失败,则抛出异常。 application.properties 中的 Jackson 属性似乎没有任何选项来设置 Jackson 的严格程度。
标签: spring-mvc spring-boot jackson