java - 确认传递到 Spring Rest Endpoint 的 RequestBody 的无效输入的方法

标签 java spring rest spring-boot

我有一个充当休息服务的 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/

相关文章:

RESTful幂等

java - 如何使用 junit 对 HttpClient 重试逻辑进行单元测试

java - Spring集成-读取JDBC,发送AMQP消息并COMMIT

java - jpa @version 乐观锁定

java - 有没有更好的方法在Spring客户端实现中并发调用REST API?

rest - REST Assured 的多个实例

java - GAE Java灵活环境随机实例正在创建

C#/Java - 从 Android 模拟器使用 WCF 服务

具有类类型的 Java 反射 getDeclaredMethod()

java - Spring应用程序404适用于css文件,但不适用于html文件