如何通过对@Valid列表使用BindingResult获取错误列表

时间:2019-01-07 06:37:30

标签: java spring-boot bean-validation

我有一个Spring控制器方法,我想使用@Valid进行验证并获取BindingResult错误列表。但是在我的@RequestBody中有列表列表。

@PostMapping(path="/save/inouts")
public ResponseEntity<List<InoutResponse>> saveInouts(@Valid InoutWrapper inouts, BindingResults res){
.....
}

class InoutWrapper {
   private List<Inouts> inoutList;
//getters and //setters

}

因此,我需要获取错误列表,并且每个错误都具有对Inout对象的引用以制作InoutResponse。

1 个答案:

答案 0 :(得分:1)

您有2个选项,或者从控制器参数中删除@valid批注,然后显式调用验证。如下所示:

javax.validation.Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final Set<ConstraintViolation<InoutWrapper>> constraints = validator.validate(inouts);

或者为您的控制器编写一个异常处理程序。我希望这个。如下所示:

@ControllerAdvice
class MyExceptionHandler extends ResponseEntityExceptionHandler {
  @Override
  protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
   HttpHeaders headers, HttpStatus status, WebRequest request) {
     // read ex.getBindingResult().
     return super.handleMethodArgumentNotValid(ex, headers, status, request);
    }
  }