java - 如何使用 @Valid List 的 BindingResult 获取错误列表

标签 java spring-boot bean-validation

我有一个 Spring Controller 方法,我想使用 @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 个选择,要么从 Controller 参数中删除 @valid 注释,然后显式调用验证。如下所示:

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

或者为您的 Controller 编写一个异常处理程序。我更喜欢这个。如下所示:

@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);
    }
  }

关于java - 如何使用 @Valid List 的 BindingResult 获取错误列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54069533/

相关文章:

Java JSR-303 Bean 验证 - 实现比较

java - @Range 在 spring mvc 中不起作用

java - 如何防止购物车中出现重复商品?

java - JMonkey 中的库问题

java - 我是否可以控制 jsvc stderr 输出中显示的 java 日志的日志格式?

java - JSF 2.3 整个 bean 验证会丢弃所有字段。是故意的吗?难道是我用错了什么东西?

java - 将字符串转换为 JSON 数组

java - 启动SpringBoot应用时出现No Qualifying Bean(NoSuchBeanDefinitionException)Available错误

Spring Boot 2 + Flyway + H2 : can't see generated migration in H2 Console

spring-boot - thymeleaf 显示从对象中选择的值