SpringBoot 逻辑异常统一处理
构建项目
我们将逻辑异常核心处理部分提取出来作为单独的jar
供其他模块引用,创建项目在parent
项目pom.xml
添加公共使用的依赖,配置内容如下所示:
<dependencies>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试模块依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
项目创建完成后除了.idea
、iml
、pom.xml
保留,其他的都删除。
异常处理核心子模块
/**
* @author WGR
* @create 2019/9/7 -- 15:06
*/
public class OssException extends RuntimeException implements Serializable {
private static final long serialVersionUID = 1L;
private Object[] errFormatArr;
public OssException(String message,Object... obj) {
super(message);
this.errFormatArr = obj;
}
//由于实际需要,因此又追加以下两种构造方法
public OssException(String message, Throwable cause) {
super(message, cause);
}
public OssException(Throwable cause) {
super(cause);
}
public Object[] getErrFormatArr() {
return errFormatArr;
}
public void setErrFormatArr(Object[] errFormatArr) {
this.errFormatArr = errFormatArr;
}
}
统一返回结果定义
@Slf4j
@ControllerAdvice
public class OssExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ModelAndView handle(Exception ex) {
//使用FastJson提供的FastJsonJsonView视图返回,不需要捕获异常
FastJsonJsonView view = new FastJsonJsonView();
R result = null;
if (ex instanceof OssException) {//自义异常
result = M.getErrR(ex.getMessage(),((OssException) ex).getErrFormatArr());
}else if(ex instanceof MaxUploadSizeExceededException) {//Spring的文件上传大小异常
result = M.getErrR("exception.maxUploadSizeExceededException",PropUtil.getInteger("upload.maxSize"));
}else if(ex instanceof DataAccessException) {//Spring的JDBC异常
result = M.getErrR("exception.dataAccessException");
}else {//其他未知异常
result = M.keyErrR("exception.other");
}
//开发过程中打印一下异常信息,生产过程可关闭
if(result.getErrCode() != 60113) { //20181225 登陆会话失效,不打印了
String stackTrace = StackUtil.getStackTrace(ex);
log.error("----->"+stackTrace);
}
//电脑端,封装异常信息 20181128 安全测试问题要求关闭详细异常信息
//if(WebUtil.isComputer()) result.setErrdetail(stackTrace);
result.setErrdetail(ex.getMessage()); //20190128 异常信息简易的还需加入
view.setAttributesMap(result);
return new ModelAndView(view);
}
}
由于种种原因,只能贴出部分代码,可以提供思路。
SpringBoot 逻辑异常统一处理的更多相关文章
- Springboot项目全局异常统一处理
转自https://blog.csdn.net/hao_kkkkk/article/details/80538955 最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- springBoot异常统一处理
springBoot异常统一处理 采用@ControllerAdvice注解和@ExceptionHandler注解,可以对异常进行统一处理. 1.结构图: 2.pom.xml文件: <?xml ...
- spring boot / cloud (十二) 异常统一处理进阶
spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...
- SpringBoot全局异常拦截
SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...
- SpringBoot系列——自定义统一异常处理
前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ...
- PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常
SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...
- Ext.net 异常统一管理,铥掉可恶的 Request Failure
Ext.net 异常统一管理,铥掉可恶的 Request Failure 看着这样的框框是不是很不爽 灭他.也不难.. .如果全部页面都有继承一个自定义的父类 ..那整个项目代码量就只有几行了.. 单 ...
- spring @ExceptionHandler注解方式实现异常统一处理
首先,在我们的工程中新建BaseController父类,内容如下: package com.ztesoft.zsmartcity.framework.exception; import java.i ...
随机推荐
- hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标
转载自:http://blog.fens.me/hadoop-mapreduce-log-kpi/ 今天学习了这一篇博客,写得十分好,照着这篇博客敲了一遍. 发现几个问题, 一是这篇博客中采用的had ...
- java中的IO流和多线程
1.如何用file操作目录和文件? java对待目录和文件统一使用file来表示,在创建file对象时,使用isDictionary和isFile方法进行判断 package test; import ...
- Dropout原理与实现
Dropout是深度学习中的一种防止过拟合手段,在面试中也经常会被问到,因此有必要搞懂其原理. 1 Dropout的运作方式 在神经网络的训练过程中,对于一次迭代中的某一层神经网络,先随机选择中的一些 ...
- Locomotion和Navigation的区别
Locomotion和navigation两者都是移动.漫游的意思.但是locomotion是一个比navigation更大的概念,它指的是所有的第一人称视角的变换(first-person moti ...
- dedecms5.7最新漏洞修复
最近发现织梦cms被挂马现象频繁,解决好好几个网站的问题,但是过不了多久,就又被攻击了,即使更改系统及ftp密码,也没有起到防御的作用,最后怀疑cms本身漏洞,于是采用工具扫描了一下,才发现问题的严重 ...
- JAVA TCP/IP网络通讯编程(一)
一个实例通过client端和server端通讯 客户端发送:“我是客户端,请多关照” 服务端回复:“收到来自于"+s.getInetAddress().getHostName()+" ...
- 前端防止url输入地址直接访问页面
首先,解决这个问题要搞明白此url是从程序内部跳转还是直接在地址栏输入的,如果是程序内部跳转,那就好办啦.方法如下: 判断用户是否登录状态,是否携带token 使用router.beforeEach注 ...
- Flask上下文管理机制流程(源码剖析)
Flask请求上下文管理 1 偏函数 partial 使用该方式可以生成一个新函数 from functools import partial def mod( n, m ): return n % ...
- Java匹马行天下之教你用学汉语式方法学编程语言
Java匹马行天下之教你用学汉语式方法学编程语言 前言: 前段时间接连更新了带小白从入门到了解的几篇博客: <Java匹马行天下之编程常识知多少> <Java匹马行天下之走进编程的殿 ...
- markdown下载、安装、破解、汉化与常用语法
markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式. 一.markdown下载 markdown破解版下载地址: http://www.pc6.com/ ...