java - 如何验证 spring-mvc POST webservice 中的集合?

标签 java spring web-services spring-mvc spring-web

我有一个简单的 spring 网络服务,它提供了一个 @PostMapping 并采用一个 json 元素数组。 我希望 spring 自动验证列表中的每个元素。

@RestController
public class PersonServlet {
    @PostMapping
    public void insertPersons(@RequestBody @Valid List<PersonDto> array) {
    }
}


public class PersonDto {
    @NotBlank
    private String firstname;

    @NotBlank
    private String lastname;
}

以下 POST 请求应该失败,并出现 firstname 缺失的验证错误:

[
  {
    "lastname": "john"

  },
  {
    "firstname": "jane",
    "lastname": "doe"
  }
]

结果:请求未被拒绝。为什么?

旁注:如果我只是使用 PersonDto 作为参数(不是列表),并发送一个只有一个人的 json post 请求,验证工作并正确拒绝请求。

所以一般来说,验证注解似乎有效,但只是在集合内部时无效!

最佳答案

解决方法:以下触发列表验证:

public class PersonDtoList extends ArrayList<PersonDto> {
      @Valid
      public List<PersonDto> getList() {
           return this;
      }
}

public void insertPersons(@RequestBody @Valid PersonDtoList array) {
}

关于java - 如何验证 spring-mvc POST webservice 中的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49876901/

相关文章:

java - 使用递归比较字符串

java - 复制构造函数

java - 如何从apache poi读取word文档中的注释?

java - 缓存最后 n 个查询结果的最有效方法?

python - amazon s3 get_key成功后指定的key不存在

java - 是否可以通过编程方式控制 set-jaxb-validation-event-handler?

spring - Kafka 生产者 JSON 序列化

spring - MockMvc 为所有请求配置一个 header

java - Spring 安全: Form login special characters

java - 无法调用网络服务