spring @Validated无效或Validation failed for argument [0]报错

发布时间 2023-09-15 10:45:06作者: kaka945

问题概述

关于这个问题,是在接口参数校验的时候遇到的,使用Spring Boot下spring-boot-starter-validation进行接口参数校验时出现 “ Validation failed for argument [0] in public … ”

问题原因

validation使用不当所致, 正常正常使用应该这样

 1 @ApiOperation("测试")
 2     @PostMapping("/checkblank")
 3     public AjaxResult verify(@Validated @RequestBody VerifyUserEntity entity, BindingResult bindingResult) {
 4         if (bindingResult.hasErrors()) {
 5             return AjaxResult.error(bindingResult.getFieldError().getDefaultMessage());
 6         }
 7         System.out.println("123");
 8         return AjaxResult.success();
 9     }
10 原文链接:https://blog.csdn.net/weixin_39973810/article/details/120965406
View Code

返回结果

{
    "msg": "用户code不能为空",
    "code": 500
}

但这样每次都要写BindingResult ,代码看着也不好看, 所有在想有没有其它方法来解决这个问题, 后来想到了用统一全局异常处理器来处理这个问题, 方法如下

@RestControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 自定义验证异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        log.error(e.getMessage(), e);
        String message = e.getBindingResult().getFieldError().getDefaultMessage();
        return AjaxResult.error(message);
    }
   }
————————————————:https://blog.csdn.net/weixin_39973810/article/details/120965406

控制层正常写

返回结果:

{
    "msg": "用户code不能为空",
    "code": 500
}