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

springMVC?@RestControllerAdvice注解使用方式

 更新時間:2024年08月06日 10:51:04   作者:angen2018  
這篇文章主要介紹了springMVC?@RestControllerAdvice注解使用方式,下面通過一個簡單的示例,演示如何使用?@RestControllerAdvice,感興趣的朋友跟隨小編一起看看吧

使用 @RestControllerAdvice 的主要場景包括:

  • 全局異常處理:處理所有控制器中拋出的未捕獲異常。
  • 數(shù)據(jù)校驗失敗處理:處理 Bean Validation 校驗失敗的情況。
  • 自定義響應(yīng):統(tǒng)一定義響應(yīng)格式或錯誤信息。

@RestControllerAdvice 注解的類通常與以下組件結(jié)合使用:

  • @ExceptionHandler:用于處理特定的異常類型。
  • @ResponseStatus:用于定義異常的HTTP狀態(tài)。
  • @ExceptionHandler 方法可以訪問異常對象、請求對象(WebRequest)、響應(yīng)對象等,以構(gòu)造合適的響應(yīng)。

以下是一個簡單的示例,演示如何使用 @RestControllerAdvice

java

import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    // 處理自定義異常
    @ExceptionHandler(CustomException.class)
    public ResponseEntity<String> handleCustomException(CustomException ex, WebRequest request) {
        // 構(gòu)造錯誤信息
        String error = "An error occurred: " + ex.getMessage();
        return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
    }
    // 可以添加更多的異常處理方法
}

在這個示例中,GlobalExceptionHandler 類使用 @RestControllerAdvice 注解標(biāo)記,使其成為全局異常處理器。類中的 handleCustomException 方法使用 @ExceptionHandler 注解標(biāo)記,用于處理 CustomException 類型的異常。

使用 @RestControllerAdvice 可以集中處理異常,使控制器代碼更簡潔、更專注于業(yè)務(wù)邏輯,同時提高異常處理的可維護(hù)性。

一個模擬權(quán)限校驗的案例

首先自定義一個權(quán)限不夠的異常

public class PermissionException extends Exception{
    // 構(gòu)造函數(shù)
    public PermissionException() {
        super();
    }
    public PermissionException(String message) {
        super(message);
    }
    public PermissionException(String message, Throwable cause) {
        super(message, cause);
    }
    public PermissionException(Throwable cause) {
        super(cause);
    }
}

然后用注解的方式寫一個異常處理類

@RestControllerAdvice
public class PermissionExceptionHandler {
    @ExceptionHandler(PermissionException.class)
    public Map handleMyCustomException(PermissionException ex) {
        Map<String, String> msg = new HashMap<>();
        msg.put("status","500");
        msg.put("msg","錯誤,沒有權(quán)限");
        return  msg;
    }
}

然后寫一個處理權(quán)限校驗的攔截器

/*
* preHandle在執(zhí)行處理器方法之前執(zhí)行
* postHandle在執(zhí)行處理器方法之后執(zhí)行
* afterCompletion在這次請求完成后執(zhí)行
* */
@Component
public class PermissionInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String auth = request.getParameter("auth");
        System.out.println(auth);
        if ("0".equals(auth)){
            throw new PermissionException();
        }
        //返回true放行,返回false不放行
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

然后把攔截器注冊到spring中

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private HandlerInterceptor permissionInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(permissionInterceptor)
                .addPathPatterns("/**") // 攔截所有請求
                .excludePathPatterns("/ignoreThis"); // 排除不需要攔截的請求
    }
}

然后你請求http://localhost:8080/user/1?auth=1

你會發(fā)現(xiàn)auth=1的時候攔截器放行

auth=0的時候會被攔截器攔截,并且拋出我們自定義的異常,然后自定義異常會被我們寫的異常處理器監(jiān)聽到,最終給客戶端返回沒有權(quán)限 

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

相關(guān)文章

  • 解決Mybatis的serverTimezone時區(qū)出現(xiàn)問題

    解決Mybatis的serverTimezone時區(qū)出現(xiàn)問題

    這篇文章主要介紹了解決Mybatis的serverTimezone時區(qū)出現(xiàn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 淺談一下Java中枚舉的用法

    淺談一下Java中枚舉的用法

    這篇文章主要介紹了淺談一下Java中枚舉的用法,枚舉是一個被命名的整型常數(shù)的集合,用于聲明一組帶標(biāo)識符的常數(shù),當(dāng)一個變量有幾種固定可能的取值時,就可以將它定義為枚舉類型,需要的朋友可以參考下
    2023-04-04
  • Java源碼解析HashMap的keySet()方法

    Java源碼解析HashMap的keySet()方法

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的keySet()方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • java 驗證碼的生成實現(xiàn)

    java 驗證碼的生成實現(xiàn)

    這篇文章主要介紹了java 驗證碼的生成實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • Spring Boot FeignClient 如何捕獲業(yè)務(wù)異常信息

    Spring Boot FeignClient 如何捕獲業(yè)務(wù)異常信息

    這篇文章主要介紹了Spring Boot FeignClient 如何捕獲業(yè)務(wù)異常信息的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?AOP?創(chuàng)建代理對象詳情

    Spring?AOP?創(chuàng)建代理對象詳情

    這篇文章介紹了Spring?AOP?創(chuàng)建代理對象詳情,主要介紹AOP?創(chuàng)建代理對象和上下文相關(guān)的內(nèi)容,下文分享具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • SpringMVC注解@CrossOrigin跨域問題詳解

    SpringMVC注解@CrossOrigin跨域問題詳解

    這篇文章主要介紹了SpringMVC注解@CrossOrigin跨域問題詳解,跨域是瀏覽同源策略的造成,是瀏覽器對JavaScript施加的安全限制CORS是一種可以解決跨域問題的技術(shù),需要的朋友可以參考下
    2023-11-11
  • java中你的項目應(yīng)該如何正確分層

    java中你的項目應(yīng)該如何正確分層

    這篇文章主要介紹了java中你的項目應(yīng)該如何正確分層,業(yè)務(wù)分層對于代碼規(guī)范是比較重要,決定著以后的代碼是否可復(fù)用,感興趣的可以了解一下
    2021-04-04
  • springboot操作ldap全過程

    springboot操作ldap全過程

    這篇文章主要介紹了springboot操作ldap全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot使用SSE進(jìn)行實時通知前端的實現(xiàn)代碼

    SpringBoot使用SSE進(jìn)行實時通知前端的實現(xiàn)代碼

    這篇文章主要介紹了SpringBoot使用SSE進(jìn)行實時通知前端,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論

阿城市| 长治县| 焦作市| 闸北区| 西城区| 平邑县| 高州市| 元氏县| 焦作市| 河池市| 饶阳县| 屏东市| 长治县| 志丹县| 勃利县| 呼和浩特市| 河源市| 定兴县| 巩留县| 循化| 江永县| 沙田区| 合作市| 饶平县| 峡江县| 岳阳县| 福建省| 浪卡子县| 连南| 哈密市| 新泰市| 科技| 高尔夫| 洛阳市| 长汀县| 独山县| 万全县| 建水县| 门源| 龙口市| 营山县|