问题背景:
@Validated 可以检验单个对象,但是如果需要校验@RequestBody List类型的参数时该注解不生效,可以使用@Validated和@Valid配合使用即可达到校验集合的效果
处理方案:
-
在控制器上加@Validated
-
在控制器方法参数中的List 加@Valid注解即可生效
-
在具体实体类型里面添加校验注解 如
@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();
}