最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中@ExceptionHandler注解的使用方式

 更新時間:2024年01月09日 09:31:25   作者:jack_too  
這篇文章主要介紹了Spring中@ExceptionHandler注解的使用方式,@ExceptionHandler注解我們一般是用來自定義異常的,可以認(rèn)為它是一個異常攔截器(處理器),需要的朋友可以參考下

1:@ExceptionHandler介紹

@ExceptionHandler注解我們一般是用來自定義異常的。

可以認(rèn)為它是一個異常攔截器(處理器)。

異常間的層次關(guān)系

異常間的層次關(guān)系

2: @ExceptionHandler的使用

極簡測試,一共4個類

1、一個SpringBoot啟動類

2、一個控制層

3、一個異常處理類

4、一個service類

啟動類:ExceptionhandlerdemoApplication

package com.example.exceptionhandlerdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ExceptionhandlerdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExceptionhandlerdemoApplication.class, args);
    }
}

異常處理類

package com.example.exceptionhandlerdemo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
    private final Logger logger = LogManager.getLogger(GlobalExceptionHandler.class);
    @ExceptionHandler({Exception.class})    //申明捕獲那個異常類
    public String ExceptionDemo(Exception e) {
        logger.error(e.getMessage(), e);
        return "自定義異常返回";
    }
}

控制層TestControll

package com.example.exceptionhandlerdemo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/yu")
public class TestControll {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private UserInfoSerimpl userInfoSerimpl;
    @ResponseBody
    @RequestMapping("/test")
    public String test(){
        logger.info("11111111111");
        userInfoSerimpl.saveUserInfo();
        logger.info("2222222222");
        return "sdfsfs";
    }
}

業(yè)務(wù)層:UserInfoSerimpl

package com.example.exceptionhandlerdemo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service("userInfoService")
public class UserInfoSerimpl {
    private Logger logger = LoggerFactory.getLogger(UserInfoSerimpl.class);
    public void saveUserInfo() {
        logger.error("獲取用戶信息失敗");
        test1();
        logger.info("ddddddddd");
    }
    private void test1(){
        logger.error("test1 失敗");
        throw new RuntimeException();
    }
}

測試:http://localhost:8080/yu/test
輸出:自定義異常返回

關(guān)于ExceptionHandler定義的攔截器之間的優(yōu)先級

在GlobalExceptionHandler類中定義兩個攔截器

@ExceptionHandler({RuntimeException.class})    //申明捕獲那個異常類
    public String RuntimeExceptionDemo(Exception e) {
        logger.error(e.getMessage(), e);
        return "運(yùn)行時異常返回";
    }
    @ExceptionHandler({NumberFormatException.class})    //申明捕獲那個異常類
    public String NumberFormatExceptionDemo(Exception e) {
        logger.error(e.getMessage(), e);
        return "數(shù)字轉(zhuǎn)換異常返回";
    }

在UserInfoSerimpl的test1方法中定義一個數(shù)字轉(zhuǎn)換異常, 這個異常在運(yùn)行時異常之前出現(xiàn)。

    private void test1(){
        logger.error("test1 失敗");
        	String a = "123a";
        	Integer b = Integer.valueOf(a);
        throw new RuntimeException();
    }

測試:http://localhost:8080/yu/test
輸出:自定義異常返回

結(jié)論:自定義的異常越詳細(xì),得到的異常結(jié)果就越詳細(xì)。

為什么不直接使用一個Exception完事

1:Exception什么的異常太過廣泛,我們直接拋出所有異常信息,對用戶而言是非常不友好的。

2:在事務(wù)管理里,如果我們自定義的異常繼承的是Exception, 則事務(wù)無效。如果我們是繼承RuntimeException,則不會 出現(xiàn)這個問題。

到此這篇關(guān)于Spring中@ExceptionHandler注解的使用方式的文章就介紹到這了,更多相關(guān)@ExceptionHandler注解的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    這篇文章主要介紹了項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細(xì)過程

    Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細(xì)過程

    本文要講的是?Knife4j?3.0.3?整合SpringBoot?2.6.4,在SpringBoot?2.4以上的版本和之前的版本還是不一樣的,這個也容易導(dǎo)致一些問題,本文就這兩個版本的整合做一個實(shí)戰(zhàn)介紹
    2022-09-09
  • IDEA中將SpringBoot項(xiàng)目提交到git倉庫的方法步驟

    IDEA中將SpringBoot項(xiàng)目提交到git倉庫的方法步驟

    本文主要介紹了IDEA中將SpringBoot項(xiàng)目提交到git倉庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java編程用棧來求解漢諾塔問題的代碼實(shí)例(非遞歸)

    Java編程用棧來求解漢諾塔問題的代碼實(shí)例(非遞歸)

    這篇文章主要介紹了Java編程用棧來求解漢諾塔問題的代碼實(shí)例(非遞歸),具有一定參考價值,這里給大家分享下,供朋友們參考。
    2017-10-10
  • springboot本地調(diào)試沒問題,打包運(yùn)行報錯原因及分析

    springboot本地調(diào)試沒問題,打包運(yùn)行報錯原因及分析

    這篇文章主要介紹了springboot本地調(diào)試沒問題,打包運(yùn)行報錯原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot獲取配置文件值和環(huán)境變量的方式

    SpringBoot獲取配置文件值和環(huán)境變量的方式

    本文介紹了SpringBoot配置文件的基礎(chǔ)知識、使用@Value和@ConfigurationProperties注入配置值、使用Environment接口獲取環(huán)境變量、配置文件的Profile支持、高級用法如條件化配置和配置刷新機(jī)制、以及配置的最佳實(shí)踐建議,需要的朋友可以參考下
    2026-04-04
  • Java synchronized關(guān)鍵_動力節(jié)點(diǎn)Java學(xué)院整理

    Java synchronized關(guān)鍵_動力節(jié)點(diǎn)Java學(xué)院整理

    在java中,每一個對象有且僅有一個同步鎖。這也意味著,同步鎖是依賴于對象而存在。下面通過本文給大家介紹synchronized原理 及基本規(guī)則,感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • springboot自定義redis-starter的實(shí)現(xiàn)

    springboot自定義redis-starter的實(shí)現(xiàn)

    這篇文章主要介紹了springboot自定義redis-starter的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了Java編寫實(shí)現(xiàn)坦克大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • spring配置websocket的完整流程

    spring配置websocket的完整流程

    websocket為瀏覽器為服務(wù)器提供了雙工異步通信的功能,即瀏覽器可以向服務(wù)器發(fā)送消息,服務(wù)器也可以向?yàn)g覽器發(fā)送消息,這篇文章主要給大家介紹了關(guān)于spring配置websocket的相關(guān)資料,需要的朋友可以參考下
    2025-05-05

最新評論

文登市| 石屏县| 峨山| 肇东市| 淳安县| 石台县| 滦平县| 城口县| 五华县| 原平市| 庆元县| 华容县| 扶沟县| 神农架林区| 苏州市| 休宁县| 无为县| 泌阳县| 东阳市| 海淀区| 蓝田县| 沾化县| 青田县| 台安县| 上栗县| 渭源县| 阳谷县| 呼图壁县| 普宁市| 历史| 嘉禾县| 吉安市| 阳东县| 新源县| 普陀区| 安远县| 繁昌县| 土默特左旗| 衢州市| 镇坪县| 霍城县|