SpringMvc的 @Valid 拦截到的异常如何抛出

SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用

@NotBlank( message = "昵称不能为空")
@NotNull( message = "ID不能为空")
@Pattern(
  message = "不能包括空格"
  , regexp = "\\S+"
)

等等。

这个校验会把所有的参数都校验一遍,所以它的异常里会好些列表,直接使用e.getMessage(),会输出很多累赘的东西

 

一个好的解决办法

@Valid 注解校验住的异常是 org.springframework.validation.BindException

所以可以添加一个异常拦截器,专门拦截,并且解析这种异常

具体如下:

package cn.jiashubing.config;

import cn.jiashubing.result.ResultModel;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @author jiashubing
 * @since 2019/6/17
 */
@ControllerAdvice
public class BingExceptionHandler {

    @ExceptionHandler(BindException.class)
    @ResponseBody
    public ResultModel handleBindException(Exception e) {
        //打印校验住的所有的错误信息
        StringBuilder sb = new StringBuilder("参数错误:[");
        List<ObjectError> list = ((BindException) e).getAllErrors();
        for (ObjectError item : list) {
            sb.append(item.getDefaultMessage()).append(',');
        }
        sb.deleteCharAt(sb.length() - 1);
        sb.append(']');

        String msg = sb.toString();
        return new ResultModel(false, msg);
    }

}

 

原创文章,欢迎转载,转载请注明出处!

 

转载于:https://www.cnblogs.com/acm-bingzi/p/springmvc_valid.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值