SpringBoot中配置全局异常处理

简介: 在项目开发中,肯定少不了异常的出现,作为后台开发人员,我们总是在不停的写各种接口提供给前端调用,然而不可避免的,当后台出现BUG时,前端总是丑陋的讲错误信息直接暴露给用户,这样的用户体验想必是相当差的先写一个错误请求@GetMapping("api...

在项目开发中,肯定少不了异常的出现,作为后台开发人员,我们总是在不停的写各种接口提供给前端调用,然而不可避免的,当后台出现BUG时,前端总是丑陋的讲错误信息直接暴露给用户,这样的用户体验想必是相当差的

先写一个错误请求

@GetMapping("api/error")
    public Object error(){
        int a=10/0;
        return a;
    }

使用postman测试接口,结果如下
QQ截图20180317190754.png

如果未添加全局异常处理,将会使用默认的异常处理,返回结果,返回的结果和自己的数据结构有很大的差异,对于前端处理返回结果也很麻烦,所以最好可以做个全局异常处理

@ControllerAdvice 处理全局异常

在处理controller层抛出的自定义异常时,可以实现@ControllerAdvice注解捕获。
@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
该注解作用对象为方法,并且在运行时有效,value()可以指定异常类。异常参数:包括一般的异常或特定的异常(即自定义异常),如果注解没有指定异常类,会默认进行映射。
@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开

全局异常处理代码如下:

@ControllerAdvice
public class GloablExceptionHandler {
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public Object handleException(Exception e) {
        // 记录错误信息
        String msg = e.getMessage();
        if (msg == null || msg.equals("")) {
            msg = "服务器出错";
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("message", msg);
        return jsonObject;
    }
}

我这里直接用fastjson返回json数据,也可以自定义返回实体(比较推荐).
如果是想返回页面的话可以返回ModelAndView的对象,并且不用加@ResponseBody
如果全部异常处理返回json,那么可使用@RestControllerAdvice 代替@ControllerAdvice,这样在方法上就可以不需要添加 @ResponseBody

下面我们再次来看看异常的返回

QQ截图20180317193043.png

这样就按照我们自定义的格式返回异常信息了,返回的数据结构推荐自定义返回实体。

目录
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
138 0
SpringBoot 自动配置的原理|学习笔记
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
SpringBoot使用@ConstructorBinding注解进行配置属性绑定
`SpringBoot2.2`版本发行后一些新的功能也渐渐的浮出了水面,在之前版本`SpringBoot`的配置文件与类之间的属性绑定(`@ConfigurationProperties`)是通过`Setter`方法来进行绑定对应的配置值,而从`2.2`版本开始支持了`构造函数`的方式进行绑定。
|
XML JSON 开发框架
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
|
Java 容器
SpringBoot的启动配置原理
介绍SpringBoot的启动配置原理
|
运维 NoSQL 小程序
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
328 0
springboot配置webservice服务发布
springboot配置webservice服务发布
332 0
|
存储 安全 网络协议
springboot 配置ssl 实现https访问
springboot 配置ssl 实现https访问
290 0
springboot 配置ssl 实现https访问
|
Java 应用服务中间件
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小