1. 程式人生 > >springBoot配置全域性異常處理器

springBoot配置全域性異常處理器

一.自定義自己的異常類MyException.java
public class MyException extends RuntimeException {
    private int code;

    public MyException( int code, String message ) {
        super(message);
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}
建立自定義異常類原因:java自己的異常類只有message引數,這裡我們還需要一個code引數(用來記錄請求狀態)。並且建立自定義異常還能和系統異常區分開來。
二.統一異常返回格式Result.java
public class Result implements Serializable {
    private int code;
    private String msg;
    private Object data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
三.編寫全域性異常處理器MyExceptionHandle.java
@ControllerAdvice
public class MyExceptionHandle {
    private static final Logger logger = LoggerFactory.getLogger(MyExceptionHandle.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result handle(Exception e) {
        if(e instanceof MyException) {
            MyException myException = (MyException)e;
            return ResultUtil.error(myException.getCode(),myException.getMessage());
        }else{
            logger.error("系統異常",e);
            return ResultUtil.error(ResultEnum.UNKNOWN_ERROR.getCode(),ResultEnum.UNKNOWN_ERROR.getMsg());
        }
    }

}
四.其它類

ResultEnum.java:作用:規範錯誤碼code極其具體表示含義。方便維護。

public enum ResultEnum {

    UNKNOWN_ERROR(500,"未知錯誤"),
    SUCCESS(200,"操作成功"),
    ERROR_1(111,"未成年1"),
    ERROR_2(112,"未成年2");

    private int code;
    private String msg;

    ResultEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

ResultUtil.java:作用:方便生成Result.java而已

public class ResultUtil {

    public static Result error(int code,String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(null);
        return result;
    }

    public static Result success(Object obj) {
        Result result = new Result();
        result.setCode(200);
        result.setMsg("成功");
        result.setData(obj);
        return result;
    }

    public static Result success() {
        Result result = new Result();
        result.setCode(200);
        result.setMsg("成功");
        result.setData(null);
        return result;
    }

}

HelloController.java

@RestController
public class HelloController {

    @GetMapping("/aa")
    public Result aa(Girl girl) throws Exception {
        if(girl.getId() < 18) {
            throw new MyException(ResultEnum.ERROR_1.getCode(),ResultEnum.ERROR_1.getMsg());
        }else if(girl.getId() < 20) {
            throw new MyException(ResultEnum.ERROR_2.getCode(),ResultEnum.ERROR_2.getMsg());
        }
        return ResultUtil.success("aaa");
    }

}

五.測試結果




六.注意事項

[email protected]:等價於@Controller 、@ResponseBody一起使用

[email protected]:主要和@ExceptionHandler配合使用,來配置全域性異常處理器,另外@ControllerAdvice內部使用了@Component註解,因此會自動被spring容器載入。如圖:


3.自定義異常需要繼承RuntimeException異常類,否則spring不會對事務進行回滾。
七.總結

全域性異常處理器配置核心就是上面的註解。主要作用是為了將程式中可能出現的異常情況自己丟擲然後用通用的格式顯示。以便正確的處理錯誤。另外,程式碼如果想要優化就立馬優化,如果說以後優化基本就等於永遠不不會優化了。

相關推薦

springBoot配置全域性異常處理器

一.自定義自己的異常類MyException.javapublic class MyException extends RuntimeException { private int code; public MyException( int code, St

SpringBoot(6) SpringBoot配置全域性異常

1、全域性異常 @ControllerAdvice 如果是返回json資料 則用 RestControllerAdvice,就可以不加 @ResponseBody //捕獲全域性異常,處理所有不可知的異常 @ExceptionHandler(value=Exception.class) 1 @Re

springmvc-springboot配置全域性異常跳轉頁

import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.E

SpringBoot基於@ControllerAdvice配置全域性異常處理

SpringBoot預設全域性異常處理 SpringBoot提供了一個預設的對映:/error,當處理中丟擲異常之後,會轉到請求中處理,並且該請求有一個全域性的錯誤頁面用來展示異常內容。 啟動訪問一個異常的url出現的呈現的頁面情況是這樣的: 但是這樣的頁面我們也覺得不太友好

SpringBoot2.x自定義全域性異常處理器配置

前言: 在某些業務場景,我們會在系統中針對某些業務丟擲一個統一的自定義異常,然而springBoot為了方便我們能夠對這些異常進行統一處理給我們提供了全域性異常處理器的功能,其實也就是延用了sprin

Spring MVC + dubbo分散式系統基於全域性配置異常處理器

使用@ControllerAdvice/@RestControllerAdvice配合@ExceptionHandler註解配置全域性的異常處理器,處理呼叫dubbo服務時的Exception。 測試程

SpringBoot配置全域性異常捕獲-web頁面跳轉

一 定義控制器 package com.imooc.controller; import org.springframework.stereotype.Controller; import org.

springmvc全域性異常處理器配置

第一步:自定義類實現異常處理類的介面 public class CustomExceptionResolver implements HandlerExceptionResolver{ publ

springmvc、 springboot 專案全域性異常處理

異常在專案中那是不可避免的,通常情況下,我們需要對全域性異常進行處理,下面介紹兩種比較常用的情況。 準備工作: 在捕獲到異常的時候,我們通常需要返回給前端錯誤碼,錯誤資訊等,所以我們需要手動封裝一個jsonData物件,這裡為了方便,我直接通過返回布林型別來進行判斷成功或失敗,在實際的專案中

day74_淘淘商城專案_07_solrcloud搭建 + zookeeper叢集搭建 + 搜尋功能切換到叢集版 + httpclient學習 + 全域性異常處理器 + 附錄_匠心筆記

課程計劃 1、solr叢集的搭建 2、使用solrJ管理solr叢集 3、把搜尋功能切換到solr叢集版 4、httpclient 5、全域性異常處理 1、什麼是SolrCloud   SolrCloud(solr 雲)是Solr提供的分散式搜尋

【SpringMVC整合MyBatis】springmvc異常處理-全域性異常處理器開發

異常處理 1.異常處理思路 系統中異常包括兩類:預期異常和執行時異常RuntimeException,前者通過捕獲異常從而獲取異常資訊,後者主要通過規範程式碼開發、測試通過手段減少執行時異常的發生。 系統的dao、service、controller出現都通過throws E

SpringBoot2.x配置全域性異常返回自定義頁面

1、返回自定義異常介面,需要引入thymeleaf依賴         <dependency>            <groupId>org.

SpringBoot2.x配置全域性異常實戰

服務端異常講解和SpringBoot配置全域性異常實戰         1、預設異常測試  int i = 1/0,不友好            

SpringMVC自定義全域性異常處理器

第一步:自定義異常類 package com.cyn.ssm.exception; /* * 自定義異常類 */ public class MyException extends Exception { //錯誤訊息 private String msg;

淘淘商城39-springmvc配置全域性異常處理

1.處理思路 專案執行過程中肯定會出現一些問題,當出現異常的時候,我們往往在Controller層捕獲並處理了,但這樣做不利於我們統一管理,所以需要一個前端控制器對異常進行統一處理。 全域性異常處理器中的處理邏輯: 捕獲整個系統中發生的異常。 異常寫入日誌檔案

SpringBoot攔截全域性異常併發送郵件給指定郵箱

主要是看一下Springboot中傳送郵件的方法,至於攔截Springboot全域性異常之前的文章中有。一 傳送郵件在Springboot中傳送郵件非常簡單。pom.xml引入maven依賴 <dependency> <groupId>org.

springboot全域性異常攔截器

接上一篇jsr303引數校驗,由於返回的資料提示很不友好(bindException), 需要定義全域性異常攔截器,將資訊友好的顯示給使用者 本文以處理登入為例 定義全域性異常攔截器:繼承自RuntimeException GlobalExceptionHandl

微服務 | zuul 的全域性異常處理器@ControllerAdvice

部落格引用處(以下內容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導): @ControllerAdvice + @ExceptionHandler 全域性處理 Controller 層異常 前提: 在zuul工程中建立了一個全域性異常處理器:CommonExceptionH

springboot全域性異常

我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個預設的對映:/error,當處理中丟擲異常之後,會轉到該請求中處理,並且該請求有一個全域性的錯誤頁面用來展示異常內容。 選擇一個之前實現過的Web應用(Chapter3-1-2)為基礎,啟動該應用,訪問一個不存在

ssm框架web專案配置全域性異常處理

在專案的資原始檔目錄中新增log4j.properties。比如:log4j.rootLogger = INFO,stdout,D,E###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.append