美文网首页SpringBoot
SpringBoot中配置全局异常处理

SpringBoot中配置全局异常处理

作者: 意识流丶 | 来源:发表于2018-03-17 19:32 被阅读100次

    在项目开发中,肯定少不了异常的出现,作为后台开发人员,我们总是在不停的写各种接口提供给前端调用,然而不可避免的,当后台出现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
    这样就按照我们自定义的格式返回异常信息了,返回的数据结构推荐自定义返回实体。

    相关文章

      网友评论

        本文标题:SpringBoot中配置全局异常处理

        本文链接:https://www.haomeiwen.com/subject/wygjqftx.html