spring启动,如何在列表中使用@Valid


问题内容

我正在尝试对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, "");
}

这可行。但是,当我使用input List<Status> statuses使其无法工作时。

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

基本上,我想要的是对请求正文列表中的每个Status对象应用类似于add方法中的验证检查。因此,发送方现在将确定哪些对象有故障,哪些对象无故障。

我如何以简单,快速的方式做到这一点?


问题答案:

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

在您的示例中。

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

和StatusList.java将是

@Valid
private List<Status> statuses;
//Getter //Setter //Constructors

我没有尝试过。

更新: 此SO链接中 可接受的答案很好地解释了为什么Lists不支持bean验证。