我有一个简单的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
发布请求,则验证有效且正确地拒绝了该请求。因此,一般而言,验证批注似乎可以正常工作,但在集合内部无效!
最佳答案
解决方法:以下触发列表验证:
public class PersonDtoList extends ArrayList<PersonDto> {
@Valid
public List<PersonDto> getList() {
return this;
}
}
public void insertPersons(@RequestBody @Valid PersonDtoList array) {
}