问题背景:

​ @Validated 可以检验单个对象,但是如果需要校验@RequestBody List类型的参数时该注解不生效,可以使用@Validated和@Valid配合使用即可达到校验集合的效果

处理方案:
  1. 在控制器上加@Validated

  2. 在控制器方法参数中的List 加@Valid注解即可生效

  3. 在具体实体类型里面添加校验注解 如

    @NotEmpty(message = "等级id不能为空")
    
异常处理:
/**
 * 校验list参数 使用@Validated 和 @Valid配合使用 该拦截器处理@Vaild异常
 * 我们注解中的message可以从violation中取出
 * @param ex
 * @return
 */
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class)
public ApiResult processException(ConstraintViolationException ex){
    log.warn("methodArgumentNotValidException.msg = {}", ex.getMessage());
    Set<ConstraintViolation<?>> violations = ex.getConstraintViolations();
    for (ConstraintViolation<?> violation : violations) {
        return ApiResult.retDefException(violation.getMessage());
    }
    return new ApiResult();
}

版权声明:本文为qq_35563821原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_35563821/article/details/118105274