问题概述
关于这个问题,是在接口参数校验的时候遇到的,使用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
返回结果
{ "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 }