SpringBoot配置全局自定义异常
不同于传统集中时Springmvc 全局异常,具体查看前面的章节https://www.cnblogs.com/zwdx/p/8963311.html
对于springboot框架来讲,这里我就介绍一种
1、ExceptionHandlerAdvice
import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; /**
* 处理异常信息
* @author wdh
*
*/
@ControllerAdvice
@ResponseBody
public class ExceptionHandlerAdvice extends MyExecptionHandler{ @ExceptionHandler(Exception.class)
public ResultDTO handleException(Exception e,HttpServletResponse response) {
return handler(e, response);
} }
由于是前后端分离,所以使用@ResponseBody返回json
2、MyExecptionHandler
import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;
/**
* 自定义异常处理
* @author wdh
*
*/
public class MyExecptionHandler{ public ResultDTO handler(Exception e,HttpServletResponse response){
ResultDTO result;
if (e instanceof SysException) {
result = handleSysException((SysException) e);
} else if (e instanceof ServiceException) {
result = handleServiceException((ServiceException) e);
} else {
result = handleSysException(new SysException(ERRORConstants.COMMON_SYSTEM_ERROR, e));
}
responseOutWithJson(response, result);
return result;
} private ResultDTO handleSysException(SysException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
if(StringUtil.isNotEmpty(ex.getMsg())){
result.setMessage(ex.getMsg());
}else {
result.setMessage(MessageEnums.fromcode(ex.getCode()));
}
return result;
} private ResultDTO handleServiceException(ServiceException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
result.setMessage(MessageEnums.fromcode(ex.getCode())); return result;
} protected void responseOutWithJson(HttpServletResponse response, Object responseObject) { JSONObject responseJSONObject = JSONObject.fromObject(responseObject); String jsonString = responseJSONObject.toString();
String code = responseJSONObject.getString("code");
if (ERRORConstants.COMMON_EXCEL_FORMAT_ERROR.equals(code)) {
response.setContentType("text/html;charset=UTF-8");
} else {
response.setContentType("application/json; charset=utf-8");
}
response.setCharacterEncoding(GlobalConstants.DEFAULT_ENCODING); PrintWriter out = null;
try {
out = response.getWriter();
out.append(jsonString); } catch (IOException e) { } finally {
if (out != null) {
out.close();
}
}
}
}
其中异常代码 ,为自己定义的GlobalConstants,MessageEnums
SpringBoot配置全局自定义异常的更多相关文章
- (办公)springboot配置全局异常
项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置.最近springboot用的还是蛮多的,我还是做事情,把经验发表一下.全局统一的异常,首先异常 ...
- SpringBoot(6) SpringBoot配置全局异常
1.全局异常 @ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody //捕获全局异常,处理所有不可知的异常 ...
- 【spring】-- springboot配置全局异常处理器
一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句 ...
- springboot2.x如何配置全局自定义异常
为什么要捕获异常? 我们开发中,经常运行时,代码会报错,这时候我们有可能抛出异常,而不是用try..catch来解决.而且现在前后端分离,如果不捕获异常的话,前端那边的人估计会被报的错搞得焦头烂额的. ...
- (入门SpringBoot)SpringBoot配置全局异常(五)
Spring的全局异常,用于捕获程序员没有捕获的异常.具体请看下面代码: 1.ControllerAdvice拦截异常,统一处理.通过Spring的AOP来管理. @ControllerAdvicep ...
- Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...
- springboot配置详解
springboot配置详解 Author:SimpleWu properteis文件属性参考大全 springboot默认加载配置 SpringBoot使用两种全局的配置文件,全局配置文件可以对一些 ...
- SpringBoot配置(2) slf4j&logback
SpringBoot配置(2) slf4j&logback 一.SpringBoot的日志使用 全局常规设置(格式.路径.级别) SpringBoot能自动适配所有的日志,而且底层使用slf4 ...
- SpringBoot配置(1) 配置文件application&yml
SpringBoot配置(1) 配置文件application&yml 一.配置文件 1.1 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application ...
随机推荐
- jQuery Ajax(异步改同步)
在实际使用中,我们经常会用的Ajax(异步加载,在不刷新整个网页的前提下对网页部分内容进行更新) 使用时,偶尔会遇上需要从一个接口中得到一个数组和数据对应的id,在另一个接口上再得到数据,最初写法如下 ...
- QTableview 只显示横向线
#include <QApplication> #include <QTableWidget> #include <QPainter> #include <Q ...
- Web测试中定位bug方法
在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具 ...
- Tomcat无法正常启动start.bat 一闪而过、只显示USING 故障排除
在云主机上配置tomcat的时候遇到的问题. 1. 开始的时候我将自己用的tomcat6绿色版打包放到了主机上,当我打开bin下面的时候startup.bat时,控制台一闪而过,查看log文件没有任何 ...
- MySQL 5.7 修改数据物理文件目录
修改MySQL数据库物理文件存放位置,需要在MySQL配置文件中修改相关参数.安装MySQL5.7后,在MySQL安装目录下没有找到数据库物理文件,最后经过查找发现其在“C:\ProgramData\ ...
- Using nxlog4go for Testing Environment
nxlog4go is very simple to use without any configuring, setting. For example: package main import ( ...
- CentOS 6.4安装谷歌浏览器(chromium)不是chrome
原文转载于http://www.wypblog.com/archives/782 今天给大家介绍如何在CentOS 6.4平台上面安装chromium浏览器,和Google的Chrome也类似,虽然不 ...
- 转 tcp协议里rst字段讲解
TCP协议的原理来谈谈rst复位攻击 http://russelltao.iteye.com/blog/1405349 几种TCP连接中出现RST的情况 https://blog.csdn.net/c ...
- doppia代码支持
stixels_t在stixel.hpp里,存储class stixel的vector
- 【转】深度分析Java的ClassLoader机制(源码级别)
原链接 Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中, JVM在加载类的时候,都是通过ClassLoa ...