我有一个春季启动项目,作为休息服务。其中一个端点,我们称之为/search
是一个 POST 请求方法,它使用@RequestBody并将其映射到java对象。 pojo被称为SearchCriteria
。
在测试期间,我发现如果我拼错了其中一个requestBody参数,那么该值不会映射到任何东西,但没有任何不好的事情发生(错误,异常等等)。我希望SearchCriteria对象中的3个String值是可选的,不必在每个json请求中提供,但是有没有办法捕获是否在未映射的正文中传递了无效参数?
我的问题的一个例子:
让我们说SearchCriteria.java有三个String值(string1,string2,string3)。
所以在第一个请求中,正文包含
{
"string1":"abcd",
"string2":"efgh",
"string3":"ijkl"
}
这是一个很好的要求!但是,在随后的请求中,我的身体中有一个拼写错误(string1 is now strang1
)
{
"strang1":"abcd",
"string2":"efgh",
"string3":"ijkl"
}
有没有办法抓住这个" strang1"拼写不正确?我总是可以验证string1,string2和string3是否为null,但在我的情况下,它们是可选的,因此无效。此外,即使它们是强制性的,如果添加了第4个参数,那么POJO中不包括该怎么办?说,
{
"strang1":"abcd",
"string2":"efgh",
"string1":"abcd",
"string3":"ijkl"
}
有没有办法捕获未映射到RequestBody对象的错误Request Body对象?
答案 0 :(得分:2)
Spring-boot使用jackson进行序列化和反序列化,因此您可以设置
spring.jackson.deserialization.fail_on_unknown_properties=true
在您的属性文件中,当您发送未知属性时,该文件应该为您提供400.