SpringMvc @Valid如何抛出拦截异常

网友投稿 318 2022-11-21


SpringMvc @Valid如何抛出拦截异常

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

@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.springframehttp://work.web.bind.annotatiohttp://n.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 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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决SpringBoot框架因post数据量过大没反应问题(踩坑)
下一篇:SpringBoot http post请求数据大小设置操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~