美文网首页
在SpringBoot中使用 @Validated 2021-

在SpringBoot中使用 @Validated 2021-

作者: 青山有扶苏 | 来源:发表于2021-09-27 11:38 被阅读0次

    我再方法入参时添加了@Validated这个注解,如下

        @PostMapping(value = "/add")
        public Result<?> add(@RequestBody @Validated ProxyGroupUserIdMapping proxyGroupUserIdMapping) {
            proxyGroupUserIdMappingService.bindUserToGroupUser(proxyGroupUserIdMapping);
            return Result.OK("添加成功!");
        }
    

    ProxyGroupUserIdMapping这个对象有两个字段添加了 非空的注解,并且给了指定的message

        @NotNull(message = "分组用户id不可为空")
        private String sysGroupUserId;
        /**系统普通用户的id*/
        @NotNull(message = "绑定用户id不可为空")
        private String sysUserId;
    

    这里如果入参添加了@RequestBody在校验不通过时就会返回一个MethodArgumentNotValidException这样的异常,返回给前端时,就是一大串错误

    org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.jeecg.common
    

    显然这是不可取的,需要添加一个异常转换,如下

    @RestControllerAdvice
    @Slf4j
    public class BaseExceptionHandler {
        //...省略部分异常逻辑
        @ExceptionHandler(MethodArgumentNotValidException.class)
        public Result<?> handleMedhodArgsValidata(Exception e) {
            log.error(e.getMessage(), e);
            //结果当入参为 @RequestBody  时返回的MethodArgumentNotValidException
            BindingResult bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            ObjectError objectError = allErrors.get(0);
            String defaultMessage = objectError.getDefaultMessage();
            return Result.error(400, defaultMessage);
        }
    

    如此,就仅返回在校验不通过时的message了

    参考资料
    springboot中@Valid注解与@Validated注解区别以及全局异常的处理 - 萧暮 - 博客园 (cnblogs.com)

    相关文章

      网友评论

          本文标题:在SpringBoot中使用 @Validated 2021-

          本文链接:https://www.haomeiwen.com/subject/gtmhnltx.html