如何使用@Valid List 的BindingResult 获取错误列表
How to get error list by using BindingResult for @Valid List
我有一个 Spring 控制器方法,我想使用 @Valid 验证它并获取 BindingResult 错误列表。但是在我的@RequestBody 中有 List 列表。
@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。
您有 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);
}
}
我有一个 Spring 控制器方法,我想使用 @Valid 验证它并获取 BindingResult 错误列表。但是在我的@RequestBody 中有 List 列表。
@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。
您有 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);
}
}