SpringBoot 统一异常处理
统一异常处理:
@ControllerAdvice
public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(getClass()); /**
* 处理自定义异常
*/
@ExceptionHandler(AuthException.class)
@ResponseBody
public R handleRRException(AuthException e){
R r = new R();
r.put("code", e.getCode());
r.put("msg", e.getMessage());
return r;
} @ExceptionHandler(Exception.class)
@ResponseBody
public R handleException(Exception e) {
logger.error(e.getMessage(), e);
return R.error();
}
}
现在网上一般都是这种比较简单的写法
还有其他方式:
public class ControllerExceptionResolver extends ExceptionHandlerExceptionResolver {
private static final Logger LOG = LoggerFactory.getLogger(ControllerExceptionResolver.class);
protected ModelAndView doResolveHandlerMethodException(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod, Exception exception) {
String uri = request.getRequestURI();
LOG.error("异常url:" + uri + ",处理框架", exception);
if (exception instanceof StoneSystemRuntimeException) {
// TODO 攻击或被异常访问才会出现
StoneSystemRuntimeException stoneRuntimeException = (StoneSystemRuntimeException) exception;
BasicRes res = new BasicRes();
res.setMsg(stoneRuntimeException.getMsg());
res.setResCode(stoneRuntimeException.getCode());
this.excuteJson(response, res);
LOG.error("系统运行时异常", exception);
} else if (exception instanceof StoneBizzRuntimeException) {
// TODO 普通业务异常
StoneBizzRuntimeException stoneBizzException = (StoneBizzRuntimeException) exception;
BasicRes res = new BasicRes();
res.setMsg(stoneBizzException.getMsg());
res.setResCode(stoneBizzException.getCode());
this.excuteJson(response, res);
LOG.error("业务异常", exception);
} else {
// TODO 其他未处理异常
BasicRes res = new BasicRes();
res.setMsg("系统更新中,请稍后再试");
res.setResCode(ErrorCode.SYSTEM_EXCEPTION.getCode());
this.excuteJson(response, res);
LOG.error("未定义异常", exception);
}
return new ModelAndView();
}
private String excuteJson(HttpServletResponse response, BasicRes res) {
try {
byte[] jsonBytes = JSON.toJSONBytes(res);
String exJson = new String(jsonBytes, SysConstant.CHARSET_UTF8);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(exJson);
return exJson;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
替换默认:
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter { @Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
super.extendHandlerExceptionResolvers(exceptionResolvers);
exceptionResolvers.add(this.getControllerExceptionResolver());
} @Bean
public ControllerExceptionResolver getControllerExceptionResolver() {
return new ControllerExceptionResolver();
}
}
继承实现ExceptionHandlerExceptionResolver类,这个类一般多见在SpringMVC中,但是SpringBoot中也可以继续使用
http://blog.didispace.com/springbootexception/
http://www.cnblogs.com/xinzhao/p/4902295.html
https://juejin.im/entry/5a5f3d61f265da3e5537f113
SpringBoot 统一异常处理的更多相关文章
- spring 或 springboot统一异常处理
spring 或 springboot统一异常处理https://blog.csdn.net/xzmeasy/article/details/76150370 一,本文介绍spring MVC的自定义 ...
- SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚
通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseContro ...
- springboot统一异常处理类及注解参数为数组的写法
统一异常处理类 package com.wdcloud.categoryserver.common.exception; import com.wdcloud.categoryserver.commo ...
- springboot统一异常处理及返回数据的处理
一.返回code数据的处理 代码: Result.java /** * http请求返回的最外层对象 * Created by 廖师兄 * 2017-01-21 13:34 */ public cla ...
- SpringBoot统一异常处理
/** * 异常处理器 */ @RestControllerAdvice // public class BDExceptionHandler { private Logger logger = Lo ...
- Springboot统一异常处理(@ControllerAdvice)
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind ...
- 【异常处理】Springboot对Controller层方法进行统一异常处理
Controller层方法,进行统一异常处理 提供两种不同的方案,如下: 方案1:使用 @@ControllerAdvice (或@RestControllerAdvice), @ExceptionH ...
- 配置springboot在访问404时自定义返回结果以及统一异常处理
在搭建项目框架的时候用的是springboot,想统一处理异常,但是发现404的错误总是捕捉不到,总是返回的是springBoot自带的错误结果信息. 如下是springBoot自带的错误结果信息: ...
- springboot返回统一接口与统一异常处理
springboot返回统一接口与统一异常处理 编写人员:yls 编写时间:2019-9-19 0001-springboot返回统一接口与统一异常处理 简介 创建统一的返回格式 Result 封装统 ...
随机推荐
- c#如何解析时区字符串
常见时区缩写可参考: http://time.123cha.com/knowledge/6.html 常见时区缩写如下: IDLE +12:00 国际日期变更线,东边 NZDT +13:00 新西兰 ...
- DataSet 读取xml 报错有非法字符
private void Bind() { string strLogPath = ConfigurationSettings.AppSettings["LOG_PATH"].To ...
- centos下jdk、jre安装
1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java [root@localhost ~]# cd /usr/java 2.下载jdk,然后解压 ...
- 模拟QQ登录
2018-10-28 15:54:38 开始写 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.bor ...
- Join The Future (剪枝 + 状态压缩)
一道暴力搜索的恶心剪枝题目. 先处理好某个点确定之后其他点的也确定的是谁,还有分别为什么情况,分别用vis,sta来记录.当然可以直接使用一个3进制数来表示,但是这里需要额外写一个三进制数求值的函数较 ...
- mouseTracking
[1]mouseTracking 追踪鼠标的标志位 作用:保存窗口部件默认是否接收鼠标移动事件.此成员变量在QWidget类中. [2]Qt Assistant 解释 翻译如下: 这个属性保存部件窗口 ...
- AttributeError: module 'DBBase' has no attribute 'DBBase'
AttributeError: module 'DBBase' has no attribute 'DBBase' pycharm不会将当前文件目录自动加入自己的sourse_path.右键make_ ...
- ext2文件系统的运行—superblock/inode/block
鸟哥私房菜书上内容: superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等:inode:记录文件的属性,一 ...
- JAVA 中的 Collection 和 Map 以及相关派生类的概念
JAVA中Collection接口和Map接口的主要实现类 Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的 ...
- [转载]window.location.href的用法(动态输出跳转)
无论在静态页面还是动态输出页面中window.location.href都是不错的用了跳转的实现方案 javascript中的location.href有很多种用法,主要如下. self.loca ...