Spring @Validated 使用

Controller层中增加校验

1.入参的对象上面增加

这种校验的注解,message上可写不满足时的话术,group是用来,如果有多个方法的入参使用同一个对象,但是每个方法所需的参数不一致,每个方法上面标记一个interface,表明这个方法需要用到那些参数是必传的。

可直接在Form中定义接口

2.在方法入参前增加 @Validated 注解 如果需要指定interface,在后面增加interface

 

3.增加全局异常处理 这里只是捕捉到异常,获取到所有的异常描述,具体要返回给前段什么内容,视情况而定,我这里是将所有异常组装为字符串返回给前段

@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 参数效验异常处理器
     *
     * @param e 参数验证异常
     * @return ResponseBean
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseBean parameterExceptionHandler(MethodArgumentNotValidException e) {
        LogUtil.warn("参数验证异常-MethodArgumentNotValidException", e);
        // 获取异常信息
        BindingResult exceptions = e.getBindingResult();
        // 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
        if (exceptions.hasErrors()) {
            List<ObjectError> errors = exceptions.getAllErrors();
            if (!errors.isEmpty()) {
                //将所有的异常拿到
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < errors.size(); i++) {
                    if (i == errors.size() - 1) {
                        sb.append(errors.get(i).getDefaultMessage());
                    } else {
                        sb.append(errors.get(i).getDefaultMessage()).append(",");
                    }
                }
                return new ResponseBean(false, sb.toString());
            }
        }
        return new ResponseBean(false, BaseResultCode.PARAM_EMPTY.getCode());
    }

    /**
     * 参数效验异常处理器
     *
     * @param e 参数验证异常
     * @return ResponseBean
     */
    @ExceptionHandler(BindException.class)
    public ResponseBean parameterExceptionHandler(BindException e) {
        LogUtil.warn("参数验证异常-BindException", e);
        // 获取异常信息
        BindingResult exceptions = e.getBindingResult();
        // 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
        if (exceptions.hasErrors()) {
            List<ObjectError> errors = exceptions.getAllErrors();
            if (!errors.isEmpty()) {
                //将所有的异常拿到
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < errors.size(); i++) {
                    if (i == errors.size() - 1) {
                        sb.append(errors.get(i).getDefaultMessage());
                    } else {
                        sb.append(errors.get(i).getDefaultMessage()).append(",");
                    }
                }
                return new ResponseBean(false, sb.toString());
            }
        }
        return new ResponseBean(false, BaseResultCode.PARAM_EMPTY.getCode());
    }

(不用这全局异常也行,在方法中手动增加一个BindingResult 包是‘org.springframework.validation’,通过这个对象的hasErrors()方法也能判断有没有异常,如果有异常,返回true,然后拿到所有的异常也行,看你需要那种)

boolean b = bindingResult.hasErrors();
if (b){
    List<ObjectError> allErrors = bindingResult.getAllErrors();
    allErrors.forEach(objectError -> {
        String defaultMessage = objectError.getDefaultMessage();
        //defaultMessage 就是一个异常描述 后续操作自己看自己的需求
    });
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值