100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Spring 全局异常拦截根据业务返回不同格式数据 自定义异常

Spring 全局异常拦截根据业务返回不同格式数据 自定义异常

时间:2020-05-22 14:12:05

相关推荐

Spring 全局异常拦截根据业务返回不同格式数据 自定义异常

1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式

2.自定义异常类 处理不同业务的异常

接下来开始入手代码:

1).自定义异常类

@ControllerAdvice//添加注解 记得开启spring的全局扫描public class BusinessException extends RuntimeException {private static final long serialVersionUID = 2332608236621015980L;private String code;public BusinessException(String code,String message) {super(message);this.code = code;}public BusinessException() {}public String getCode() {return code;}public void setCode(String code) {this.code = code;}}

2).全局异常处理器(对拦截到的异常进行分类处理)

/*** 全局异常处理器* @author chenhao*/public class BusinessExceptionResolver implements HandlerExceptionResolver {/**日志log*/private static Logger log = LoggerFactory.getLogger(BusinessExceptionResolver.class);//系统抛出的异常 @Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {//handler就是处理器适配器要执行的Handler对象(只有method)//解析出异常类型。/* 使用response返回 */response.setStatus(HttpStatus.OK.value()); //设置状态码response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentTyperesponse.setCharacterEncoding("UTF-8"); //避免乱码response.setHeader("Cache-Control", "no-cache, must-revalidate");//如果该 异常类型是系统 自定义的异常,直接取出异常信息。BusinessException businessException=null;try {

//根据请求方式返回不同的格式(根据自己的业务需求实现,如果只返回一种格式的不用判断)

//统一返回json 自定义了返回Result类 引入了Jacksonif ("application/json".equals(request.getContentType())){if(ex instanceof BusinessException){businessException = (BusinessException)ex;//错误信息log.error(ex.getMessage(),ex);response.getWriter().write(Result.error(businessException.getCode(),ex.getMessage()).toString());}else {log.error(ex.getMessage(),ex);response.getWriter().write(Result.error("-1", ex.getMessage()).toString());}}else {

//统一返回xml格式Message message = new Message(Constants.RESULT_FAIL);message.setScript(ex.toString());response.setContentType("text/xml");response.getWriter().write(XmlUtil.objectToString(message));}} catch (IOException e) {log.error("与客户端通讯异常:"+ e.getMessage(), e);e.printStackTrace();}ModelAndView modelAndView=new ModelAndView();return modelAndView;}}

3).Spring配置文件添加

springMVC启动加载时会将所有的异常处理HandlerExceptionResolver实现类存放到handlerExceptionResolvers一个map结构中。

<bean id="exceptionResolver" class="com.*.exception.BusinessExceptionResolver"></bean>

4).使用方式(我这里只针对JSON)

返回格式:

json格式:

{

"success": false,

"errorcode": "10",

"errormsg": "特征值不能为空",

"data": null

}

xml格式:

<?xml version="1.0" encoding="UTF-8"?>

<Message code="00001" script="java.lang.NullPointerException" rowCount=""/>

目前知道的还可以定义很多异常来让框架简易。多学学总没错。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。