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

SpringMVC中的@ControllerAdvice使用場(chǎng)景詳解

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

@ControllerAdvice使用場(chǎng)景

在Spring MVC進(jìn)行調(diào)用的過(guò)程中,會(huì)有很多的特殊的需求。比如全局異常,分頁(yè)信息和分頁(yè)搜索條件,請(qǐng)求時(shí)帶來(lái)返回時(shí)還得回顯頁(yè)面。

Spring提供@ControllerAdvice對(duì)需要處理的范圍進(jìn)行配置。

@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 {};
    // 控制范圍可以用注解進(jìn)行配置
    Class<? extends Annotation>[] annotations() default {};
}

1、ExceptionHandler

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

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

1)、全局異常處理定義

@ControllerAdvice(basePackages = "com.kevin.tool")
public class ExceptionHandlerController {
    /**
     * 錯(cuò)誤后返回json
     * 如果想跳轉(zhuǎn)到專門的異常界面,則可以返回{@link org.springframework.web.servlet.ModelAndView}
     *
     * @return 標(biāo)準(zhǔn)異常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)異常,請(qǐ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)、訪問(wèn)效果

2、InitBinder

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

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)、收到的日期類型效果

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

3、ModelAttribute

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

@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平臺(tái)");
        model.addAttribute("platform", map);
    }
}

2)、控制器方法訪問(wèn)

@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使用場(chǎng)景詳解的文章就介紹到這了,更多相關(guān)@ControllerAdvice使用場(chǎng)景內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決

    springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot配置數(shù)據(jù)庫(kù)密碼特殊字符報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Eclipse插件開(kāi)發(fā)實(shí)現(xiàn)控制臺(tái)輸出信息的方法

    Eclipse插件開(kāi)發(fā)實(shí)現(xiàn)控制臺(tái)輸出信息的方法

    今天小編就為大家分享一篇關(guān)于Eclipse插件開(kāi)發(fā)實(shí)現(xiàn)控制臺(tái)輸出信息的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    這篇文章主要介紹了SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java樹(shù)形菜單對(duì)象生成

    java樹(shù)形菜單對(duì)象生成

    這篇文章主要為大家詳細(xì)介紹了java樹(shù)形菜單對(duì)象生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法

    Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringShell命令行之交互式Shell應(yīng)用開(kāi)發(fā)方式

    SpringShell命令行之交互式Shell應(yīng)用開(kāi)發(fā)方式

    本文將深入探討Spring Shell的核心特性、實(shí)現(xiàn)方式及應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者掌握這一強(qiáng)大工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java?如何獲取某年的第一天和最后一天

    Java?如何獲取某年的第一天和最后一天

    在統(tǒng)計(jì)的數(shù)據(jù)是時(shí)候,要統(tǒng)計(jì)某年的數(shù)據(jù),開(kāi)始時(shí)間是某年的第一天,結(jié)束時(shí)間是某年的最后一天,該如何獲取某年的第一天和最后一天,今天通過(guò)本文介紹下Java獲取某年的第一天和最后一天,需要的朋友可以參考下
    2023-07-07
  • cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長(zhǎng)兩天半的整體流程

    cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長(zhǎng)兩天半的整體流程

    這篇文章主要介紹了cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長(zhǎng)兩天半,主要用到的技術(shù)有session、cookie、轉(zhuǎn)發(fā)、重定向、filter、和servlet,最重要的還是具體的來(lái)運(yùn)用它們?cè)谇岸隧?yè)面真正的搭建出一個(gè)應(yīng)用,通過(guò)這個(gè)練習(xí),對(duì)我們所學(xué)的web知識(shí)做一個(gè)整合,需要的朋友可以參考下
    2022-10-10
  • Java生成二維碼的2種實(shí)現(xiàn)方法

    Java生成二維碼的2種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java生成二維碼的2種實(shí)現(xiàn)方法,二維碼的實(shí)質(zhì)就是一個(gè)鏈接地址,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例

    Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例

    下面小編就為大家?guī)?lái)一篇Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

宜州市| 师宗县| 铅山县| 龙泉市| 镇安县| 靖宇县| 石棉县| 额济纳旗| 新昌县| 乌什县| 甘泉县| 泾源县| 恭城| 涪陵区| 如皋市| 仁布县| 贵德县| 侯马市| 崇文区| 新和县| 交口县| 旺苍县| 东丰县| 康平县| 隆德县| 松滋市| 林州市| 林周县| 镇远县| 沽源县| 平阴县| 孟州市| 顺昌县| 大厂| 固始县| 宁夏| 东丰县| 治县。| 三穗县| 儋州市| 马关县|