Spring启动,如何使用@Valid和List <T>

kal*_*ari 9 java spring spring-mvc bean-validation

我试图将验证放到Spring Boot项目中.所以我把@NotNull注释放到实体字段中.在控制器中我检查它是这样的:

@RequestMapping(value="", method = RequestMethod.POST)
public DataResponse add(@RequestBody @Valid Status status, BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
        return new DataResponse(false, bindingResult.toString());
    }

    statusService.add(status);

    return  new DataResponse(true, "");
}
Run Code Online (Sandbox Code Playgroud)

这有效.但是当我使用输入时List<Status> statuses,它不起作用.

@RequestMapping(value="/bulk", method = RequestMethod.POST)
public List<DataResponse> bulkAdd(@RequestBody @Valid List<Status> statuses, BindingResult bindingResult) {
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想要的是将add方法中的验证检查应用于请求体列表中的每个Status对象.因此,发件人现在将哪些对象有错,哪些没有.

我怎样才能以简单,快捷的方式做到这一点?

Ame*_*n.M 12

我的直接建议是将List包装在另一个POJO bean中.并将其用作请求体参数.

在你的例子中.

@RequestMapping(value="/bulk", method = RequestMethod.POST)
public List<DataResponse> bulkAdd(@RequestBody @Valid StatusList statusList, BindingResult bindingResult) {
// some code here
}
Run Code Online (Sandbox Code Playgroud)

和StatusList.java将是

@Valid
private List<Status> statuses;
//Getter //Setter //Constructors
Run Code Online (Sandbox Code Playgroud)

我没试过.

更新:此SO链接中 接受的答案提供了一个很好的解释,说明列表不支持bean验证.