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

Spring中@ExceptionHandler注解的使用方式

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

1:@ExceptionHandler介紹

@ExceptionHandler注解我們一般是用來(lái)自定義異常的。

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

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

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

2: @ExceptionHandler的使用

極簡(jiǎn)測(cè)試,一共4個(gè)類

1、一個(gè)SpringBoot啟動(dòng)類

2、一個(gè)控制層

3、一個(gè)異常處理類

4、一個(gè)service類

啟動(dòng)類: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})    //申明捕獲那個(gè)異常類
    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();
    }
}

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

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

在GlobalExceptionHandler類中定義兩個(gè)攔截器

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

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

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

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

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

為什么不直接使用一個(gè)Exception完事

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

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

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

相關(guān)文章

最新評(píng)論

齐河县| 朝阳区| 崇文区| 湟源县| 汉源县| 甘孜| 铜梁县| 手游| 乾安县| 定远县| 宁海县| 威海市| 驻马店市| 庄浪县| 福鼎市| 姜堰市| 枣强县| 牙克石市| 乌拉特中旗| 措美县| 崇阳县| 乐清市| 三河市| 皮山县| 乌鲁木齐县| 襄汾县| 思茅市| 峡江县| 六安市| 晋中市| 理塘县| 永定县| 平利县| 成武县| 葫芦岛市| 舟山市| 尼勒克县| 中宁县| 桐梓县| 兴和县| 博白县|