确认传递给Spring Rest Endpoint的RequestBody的无效输入的方法

时间:2018-05-17 16:31:34

标签: java spring rest spring-boot

我有一个春季启动项目,作为休息服务。其中一个端点,我们称之为/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对象?

1 个答案:

答案 0 :(得分:2)

Spring-boot使用jackson进行序列化和反序列化,因此您可以设置

spring.jackson.deserialization.fail_on_unknown_properties=true

在您的属性文件中,当您发送未知属性时,该文件应该为您提供400.