我有一个充当休息服务的 Spring Boot 项目。其中一个端点(我们称之为 /search
)是一个 POST 请求方法,它使用 @RequestBody 并将其映射到 java 对象。该 pojo 称为 SearchCriteria
。
在测试过程中,我发现如果我拼错了 requestBody 参数之一,该值不会映射到任何内容,但不会发生任何不好的情况(错误、异常等)。我希望 SearchCriteria 对象中的 3 个字符串值是可选的,不必在每个 json 请求中提供,但是有没有办法捕获在未映射的正文中传递的无效参数? p>
我的问题的一个例子:
假设 SearchCriteria.java 有三个字符串值(string1、string2、string3)。
所以在第一个请求中,正文包含
{
"string1":"abcd",
"string2":"efgh",
"string3":"ijkl"
}
这是一个很好的要求!但是,在后续请求中,我的正文中有一个拼写错误(string1 现在是 strang1
)
{
"strang1":"abcd",
"string2":"efgh",
"string3":"ijkl"
}
有没有办法发现这个“strang1”拼写不正确?我总是可以验证 string1、string2 和 string3 是否不为空,但在我的情况下它们是可选的,因此无效。另外,即使它们是强制性的,如果添加了 POJO 中未包含的第四个参数怎么办?说,
{
"strang1":"abcd",
"string2":"efgh",
"string1":"abcd",
"string3":"ijkl"
}
有没有办法捕获未映射到 RequestBody 对象的错误 Request Body 对象?
最佳答案
Spring-boot使用jackson进行序列化和反序列化,所以可以设置
spring.jackson.deserialization.fail_on_unknown_properties=true
在您的属性文件中,当您发送未知属性时,该文件应该为您提供 400。
关于java - 确认传递到 Spring Rest Endpoint 的 RequestBody 的无效输入的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396416/