在SpringBoot中使用 @Validated 2021-09-27

我再方法入参时添加了@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 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-09-27)