mem*_*und 4 java spring web-services spring-mvc spring-web
我有一个简单的springWeb服务,它提供@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;
}
Run Code Online (Sandbox Code Playgroud)
以下POST请求应失败,firstname并缺少验证错误:
[
{
"lastname": "john"
},
{
"firstname": "jane",
"lastname": "doe"
}
]
Run Code Online (Sandbox Code Playgroud)
结果:请求未被拒绝。为什么?
旁注:如果我仅将其PersonDto用作参数(而不是列表),并且json仅由一个人发送发布请求,则验证有效且正确地拒绝了该请求。
因此,一般而言,验证批注似乎可以正常工作,但在集合内部无效!
解决方法:以下触发列表验证:
public class PersonDtoList extends ArrayList<PersonDto> {
@Valid
public List<PersonDto> getList() {
return this;
}
}
public void insertPersons(@RequestBody @Valid PersonDtoList array) {
}
Run Code Online (Sandbox Code Playgroud)
您应该在列表之外添加另一个类,例如 PostCommand:
public class PostCommand() {
@Valid
private List<PersonDTO> list;
}
Run Code Online (Sandbox Code Playgroud)
并根据请求发送:
@RestController
public class PersonServlet {
@PostMapping
public void insertPersons(@RequestBody @Valid PostCommand postCommand) {
}
}
Run Code Online (Sandbox Code Playgroud)
JSON 将是:
{
"list": [
{
"lastname": "john"
},
{
"firstname": "jane",
"lastname": "doe"
}
]
}
Run Code Online (Sandbox Code Playgroud)
而且你会有一个例外。
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |