zoukankan      html  css  js  c++  java
  • springboot统一异常处理

      在做web应用时,请求过程中发生错误是常见的事,而一般界面显示大片白底黑字让人无从下手,对于用户的体验

    也不是很好,这时我们可以利用@ControllerAdvice、@ExceptionHandler、@ResponseBody实现全局异常处理,能够帮助

    开发者或者客户端迅速定位错误。

      步骤:

    1.首先我们创建一个JSON返回对象,用来封装{code:消息类型,url:请求地址,data:请求返回的数据,message:错误信息}

    package com.wutongshu.springboot.domain;
    
    public class ErrorInfo<E> {
    
        public static final int OK=0;
    
        public static  final int ERROR=100;
    
        private int code;
        private String url;
        private E data;
        private String message;
    
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public E getData() {
            return data;
        }
    
        public void setData(E data) {
            this.data = data;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    }

    2.创建一个自定义异常

    package com.wutongshu.springboot.exception;
    
    public class MyException extends Exception{
        public MyException(String message){
            super(message);
        }
    }

    3.在controller中增加测试异常的映射,抛出MyException异常

    4.创建一个全局处理异常的类,

    @ControllerAdvice 注解定义全局异常处理类

    @ExceptionHandler  指定自定义错误处理方法拦截的异常类型

    @ResponseBody 指返回JSON类型的数据

    package com.wutongshu.springboot;
    
    import com.wutongshu.springboot.domain.ErrorInfo;
    import com.wutongshu.springboot.exception.MyException;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * 处理异常类
     */
    @ControllerAdvice
    public class GlobalMyExceptionHandler {
        @ExceptionHandler(value = MyException.class)
        @ResponseBody
        public ErrorInfo<String> handlerException(HttpServletRequest request,
                                                  MyException e){
            ErrorInfo<String> errorInfo=new ErrorInfo<>();
            errorInfo.setMessage(e.getMessage());
            errorInfo.setUrl(request.getRequestURI());
            errorInfo.setCode(ErrorInfo.ERROR);
            errorInfo.setData("错误数据");
            return errorInfo;
        }
    
    }

    测试:访问http://http://127.0.0.1:8087/test/testException,得到以下内容

  • 相关阅读:
    [ASP.NET] 使用 ASP.NET SignalR 添加实时 Web
    [ORM] Entity Framework(2) CodeFirst进阶
    [ORM] Entity Framework(1) CodeFirst快速入门
    [C#] 谈谈异步编程async await
    [Solution] NPOI操作Excel
    消息队列二
    消息队列一
    redis成长之路——(七)
    redis成长之路——(六)
    redis成长之路——(五)
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/10898091.html
Copyright © 2011-2022 走看看