构建项目

我们将逻辑异常核心处理部分提取出来作为单独的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>

项目创建完成后除了.ideaimlpom.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 逻辑异常统一处理的更多相关文章

  1. Springboot项目全局异常统一处理

    转自https://blog.csdn.net/hao_kkkkk/article/details/80538955 最近在做项目时需要对异常进行全局统一处理,主要是一些分类入库以及记录日志等,因为项 ...

  2. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  3. springBoot异常统一处理

    springBoot异常统一处理 采用@ControllerAdvice注解和@ExceptionHandler注解,可以对异常进行统一处理. 1.结构图: 2.pom.xml文件: <?xml ...

  4. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

  5. SpringBoot全局异常拦截

    SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...

  6. SpringBoot系列——自定义统一异常处理

    前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ...

  7. PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常

    SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...

  8. Ext.net 异常统一管理,铥掉可恶的 Request Failure

    Ext.net 异常统一管理,铥掉可恶的 Request Failure 看着这样的框框是不是很不爽 灭他.也不难.. .如果全部页面都有继承一个自定义的父类 ..那整个项目代码量就只有几行了.. 单 ...

  9. spring @ExceptionHandler注解方式实现异常统一处理

    首先,在我们的工程中新建BaseController父类,内容如下: package com.ztesoft.zsmartcity.framework.exception; import java.i ...

随机推荐

  1. 如何把安全证书导入到java中的cacerts证书库(转)

    如何把安全证书导入到java中的cacerts证书库   提示: javax.net.ssl.SSLHandshakeException: sun.security.validator.Validat ...

  2. shell 获取当前目录下的jar文件

    1.示例 function getDir() { ` do fileName=$"/"$item if [ -d $fileName ] then echo $fileName&q ...

  3. rabbitmq linux卸载

    rabbitmq是运行在erlang环境下的,所以卸载时应将erlang卸载. 1.卸载rabbitmq相关 卸载前先停掉rabbitmq服务,执行命令 $ service rabbitmq-serv ...

  4. beego之操作model

    beego之操作model 1.环境配置 1>.下载安装orm go get github.com/astaxie/beego/orm 默认安装路径在gopath路径下,可使用go env查看路 ...

  5. 【主动学习】Variational Adversarial Active Learning

    本文记录了博主阅读ICCV2019一篇关于主动学习论文的笔记,第一篇博客,以后持续更新哈哈 论文题目:<Variational AdVersarial Active Learning> 原 ...

  6. django的url分发封装

    h2, body>h3, body>h4, body>h1{ padding: 10px; background-color: #4cae4c; text-align: center ...

  7. Java线程状态和关闭线程的正确姿势

    1.线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释. public enum State { /** 表示一个线程还没启用(即未 ...

  8. 浅谈json web token及应用

    Json Web Token (JWT),是一个非常轻巧的规范,这个规范允许在网络应用环境间客户端和服务器间较安全的传递信息.该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO) ...

  9. Python函数参数与参数解构

    1 Python中的函数 函数,从数学的角度来讲是,输入一个参数,经过一个表达式的处理后得到一个结果的输出,即就是x-->y的一个映射.同样,在Python或者任何编程语言中,函数其实就是实现一 ...

  10. redis安装及启动

    Redis 的安装及启动停止 下载 https://redis.io/download 软件copy至虚拟机中,常用的路径为/root/software 开始安装 安装gcc 目的是为了编译软件 yu ...