欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC中的@ControllerAdvice使用場景詳解

 更新時間:2024年01月03日 08:31:52   作者:it_lihongmin  
這篇文章主要介紹了SpringMVC中的@ControllerAdvice使用場景詳解,在Spring?MVC進行調(diào)用的過程中,會有很多的特殊的需求,比如全局異常,分頁信息和分頁搜索條件,請求時帶來返回時還得回顯頁面,需要的朋友可以參考下

@ControllerAdvice使用場景

在Spring MVC進行調(diào)用的過程中,會有很多的特殊的需求。比如全局異常,分頁信息和分頁搜索條件,請求時帶來返回時還得回顯頁面。

Spring提供@ControllerAdvice對需要處理的范圍進行配置。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice {
    // 控制的掃描包范圍
    @AliasFor("basePackages")
    String[] value() default {};
    // 控制的掃描包范圍
    @AliasFor("value")
    String[] basePackages() default {};
    // 控制的包類
    Class<?>[] basePackageClasses() default {};
    // @Controller或者@RestController的類 的數(shù)據(jù)
    Class<?>[] assignableTypes() default {};
    // 控制范圍可以用注解進行配置
    Class<? extends Annotation>[] annotations() default {};
}

1、ExceptionHandler

系統(tǒng)比較龐大時很多的異常是不能控制,或者未知的,不能將所有的sql異常,反射異常,類不存在等拋到頁面上展示給用戶。

則需要一個全局的攔截器處理,Spring 提供了@ExceptionHandler處理方式。

1)、全局異常處理定義

@ControllerAdvice(basePackages = "com.kevin.tool")
public class ExceptionHandlerController {
    /**
     * 錯誤后返回json
     * 如果想跳轉(zhuǎn)到專門的異常界面,則可以返回{@link org.springframework.web.servlet.ModelAndView}
     *
     * @return 標準異常json
     */
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public Map<String, String> handler() {
        Map<String, String> errorMap = new HashMap<String, String>(16);
        errorMap.put("code", "500");
        errorMap.put("msg", "系統(tǒng)異常,請稍后重試");
        return errorMap;
    }
}

2)、控制器方法調(diào)用異常

@RestController
public class ControllerAdviceDemoController {
    @ResponseBody
    @RequestMapping("bindException")
    public String bindException() {
        getMessage();
        return "ok";
    }
    private void getMessage() {
        throw new RuntimeException("未知異常!");
    }
}

3)、訪問效果

2、InitBinder

數(shù)據(jù)綁定有很多的場景,當前比如前端傳入的日期為字符串類型,后端按照Format進解析為日期。

1)、全局日期綁定定義

@ControllerAdvice(basePackages = "com.kevin.tool")
public class ExceptionHandlerController {
    @InitBinder("date")
    public void globalInitBinder(WebDataBinder binder) {
        binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
    }
}

2)、控制器方法調(diào)用日期轉(zhuǎn)換

@RestController
public class ControllerAdviceDemoController {
    @ResponseBody
    @RequestMapping(value = "/initBind", method = RequestMethod.GET)
    public String detail(@RequestParam("id") long id, Date date) {
        System.out.println(date);
        System.out.println(id);
        return "ok";
    }
}

3)、收到的日期類型效果

訪問地址為://127.0.0.1:9999/initBind?id=123&date=2019-12-30

3、ModelAttribute

先看看@ModelAttribute的注解信息,元注解@Target指定可以修飾方法參數(shù)和方法(全局)。當前模擬一種常見,就是將所有輸出的信息都加上當前的平臺信息(比如版本等公共信息,這種需求還是比較多的)。

@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ModelAttribute {
    
    @AliasFor("name")
    String value() default "";
    
    @AliasFor("value")
    String name() default "";
 
    boolean binding() default true;
}

1)、全局返回屬性添加

@ControllerAdvice(basePackages = "com.kevin.tool")
public class ExceptionHandlerController {
 
    @ModelAttribute
    public void addAttributes(Model model) {
        model.addAttribute("msg", "hello");
 
        HashMap<String, String> map = new HashMap<>(16);
        map.put("version", "1.0.0");
        map.put("name", "XXX平臺");
        model.addAttribute("platform", map);
    }
}

2)、控制器方法訪問

@RestController
public class ControllerAdviceDemoController {
 
    @GetMapping("/modelAttributeTest")
    private String modelAttributeTest(@ModelAttribute("msg") String msg,
        @ModelAttribute("platform") Map<String, String> platform) {
 
        String result = "msg:" + msg + "<br>" + "info:" + platform;
        return result;
    }
 
}

3)、輸出效果

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

相關(guān)文章

  • SpringMVC結(jié)合模板模式實現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    SpringMVC結(jié)合模板模式實現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù)

    我們經(jīng)常會遇到需要傳遞對象的場景,有時候,我們需要將一個對象的數(shù)據(jù)傳遞給另一個對象進行處理,但是又不希望直接暴露對象的內(nèi)部結(jié)構(gòu)和實現(xiàn)細節(jié),所以本文給大家介紹了SpringMVC結(jié)合模板模式實現(xiàn)MyBatisPlus傳遞嵌套JSON數(shù)據(jù),需要的朋友可以參考下
    2024-03-03
  • 深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用

    深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用

    po vo bo dto dao 和 pojo 是軟件開發(fā)中經(jīng)常使用的一些概念,用于設(shè)計和實現(xiàn)對象模型,下面將分別解釋這些概念的含義及其在開發(fā)中的應(yīng)用,這篇文章主要給大家介紹了關(guān)于Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Java實現(xiàn)簡單的斗地主游戲

    Java實現(xiàn)簡單的斗地主游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的斗地主游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 解決logback使用${spring.application.name}日志打印路徑的問題

    解決logback使用${spring.application.name}日志打印路徑的問題

    這篇文章主要介紹了解決logback使用${spring.application.name}日志打印路徑的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 關(guān)于jar包增量更新分析

    關(guān)于jar包增量更新分析

    這篇文章主要介紹了關(guān)于jar包增量更新分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java?NIO?中?Selector?解析

    Java?NIO?中?Selector?解析

    這篇文章主要介紹了Java?NIO?中?Selector,Selector即選擇器,選擇器提供選擇執(zhí)行已經(jīng)就緒的任務(wù)的能力即為翻譯為多路復(fù)用,下面文章對Selector詳細介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • Java?Spring中Bean的作用域及生命周期

    Java?Spring中Bean的作用域及生命周期

    這篇文章主要介紹了Java?Spring中Bean的作用域及生命周期,Bean的作用域默認是單例模式的,也就是說所有?的使?的都是同?個對象,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-08-08
  • Spring使用Configuration注解管理bean的方式詳解

    Spring使用Configuration注解管理bean的方式詳解

    在Spring的世界里,Configuration注解就像是一位細心的園丁,它的主要職責(zé)是在這個繁花似錦的園子里,幫助我們聲明和管理各種各樣的bean,本文給大家介紹了在Spring中如何優(yōu)雅地管理你的bean,需要的朋友可以參考下
    2024-05-05
  • Java中的事件處理機制詳解

    Java中的事件處理機制詳解

    這篇文章主要介紹了Java中的事件處理機制詳解,Java事件處理是采取"委派事件模型",當事件發(fā)生時,產(chǎn)生事件的對象,會把此"信息"傳遞給"事件的監(jiān)聽者"處理,這里所說的"信息"實際上就是java.awt.event事件類庫里某個類創(chuàng)建對象,把它稱為"事件的對象",需要的朋友可以參考下
    2023-10-10
  • SpringBoot配置Access-Control-Allow-Origin教程

    SpringBoot配置Access-Control-Allow-Origin教程

    文章介紹了三種配置Spring Boot跨域訪問的方法:1. 使用過濾器;2. 在WebConfig配置文件中設(shè)置;3. 通過注解配置,作者分享了個人經(jīng)驗,并鼓勵讀者支持腳本之家
    2025-03-03

最新評論