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

SpringMVC @ControllerAdvice使用場(chǎng)景

 更新時(shí)間:2019年11月01日 09:06:18   作者:江南一點(diǎn)雨  
這篇文章主要介紹了SpringMVC @ControllerAdvice使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了SpringMVC @ControllerAdvice使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

@ControllerAdvice ,很多初學(xué)者可能都沒有聽說(shuō)過(guò)這個(gè)注解,實(shí)際上,這是一個(gè)非常有用的注解,顧名思義,這是一個(gè)增強(qiáng)的 Controller。使用這個(gè) Controller ,可以實(shí)現(xiàn)三個(gè)方面的功能:

  • 全局異常處理
  • 全局?jǐn)?shù)據(jù)綁定
  • 全局?jǐn)?shù)據(jù)預(yù)處理

靈活使用這三個(gè)功能,可以幫助我們簡(jiǎn)化很多工作,需要注意的是,這是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用,下面分別來(lái)看。

全局異常處理

使用 @ControllerAdvice 實(shí)現(xiàn)全局異常處理,只需要定義類,添加該注解即可定義方式如下:

@ControllerAdvice
public class MyGlobalExceptionHandler {
  @ExceptionHandler(Exception.class)
  public ModelAndView customException(Exception e) {
    ModelAndView mv = new ModelAndView();
    mv.addObject("message", e.getMessage());
    mv.setViewName("myerror");
    return mv;
  }
}

在該類中,可以定義多個(gè)方法,不同的方法處理不同的異常,例如專門處理空指針的方法、專門處理數(shù)組越界的方法…,也可以直接向上面代碼一樣,在一個(gè)方法中處理所有的異常信息。

@ExceptionHandler 注解用來(lái)指明異常的處理類型,即如果這里指定為 NullpointerException,則數(shù)組越界異常就不會(huì)進(jìn)到這個(gè)方法中來(lái)。

全局?jǐn)?shù)據(jù)綁定

全局?jǐn)?shù)據(jù)綁定功能可以用來(lái)做一些初始化的數(shù)據(jù)操作,我們可以將一些公共的數(shù)據(jù)定義在添加了 @ControllerAdvice 注解的類中,這樣,在每一個(gè) Controller 的接口中,就都能夠訪問導(dǎo)致這些數(shù)據(jù)。

使用步驟,首先定義全局?jǐn)?shù)據(jù),如下:

@ControllerAdvice
public class MyGlobalExceptionHandler {
  @ModelAttribute(name = "md")
  public Map<String,Object> mydata() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("age", 99);
    map.put("gender", "男");
    return map;
  }
}

使用 @ModelAttribute 注解標(biāo)記該方法的返回?cái)?shù)據(jù)是一個(gè)全局?jǐn)?shù)據(jù),默認(rèn)情況下,這個(gè)全局?jǐn)?shù)據(jù)的 key 就是返回的變量名,value 就是方法返回值,當(dāng)然開發(fā)者可以通過(guò) @ModelAttribute 注解的 name 屬性去重新指定 key。

定義完成后,在任何一個(gè)Controller 的接口中,都可以獲取到這里定義的數(shù)據(jù):

@RestController
public class HelloController {
  @GetMapping("/hello")
  public String hello(Model model) {
    Map<String, Object> map = model.asMap();
    System.out.println(map);
    int i = 1 / 0;
    return "hello controller advice";
  }
}

全局?jǐn)?shù)據(jù)預(yù)處理

考慮我有兩個(gè)實(shí)體類,Book 和 Author,分別定義如下:

public class Book {
  private String name;
  private Long price;
  //getter/setter
}
public class Author {
  private String name;
  private Integer age;
  //getter/setter
}

此時(shí),如果我定義一個(gè)數(shù)據(jù)添加接口,如下:

@PostMapping("/book")
public void addBook(Book book, Author author) {
  System.out.println(book);
  System.out.println(author);
}

這個(gè)時(shí)候,添加操作就會(huì)有問題,因?yàn)閮蓚€(gè)實(shí)體類都有一個(gè) name 屬性,從前端傳遞時(shí) ,無(wú)法區(qū)分。此時(shí),通過(guò) @ControllerAdvice 的全局?jǐn)?shù)據(jù)預(yù)處理可以解決這個(gè)問題

解決步驟如下:

1.給接口中的變量取別名

@PostMapping("/book")
public void addBook(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) {
  System.out.println(book);
  System.out.println(author);
}

2.進(jìn)行請(qǐng)求數(shù)據(jù)預(yù)處理

在 @ControllerAdvice 標(biāo)記的類中添加如下代碼:

@InitBinder("b")
public void b(WebDataBinder binder) {
  binder.setFieldDefaultPrefix("b.");
}
@InitBinder("a")
public void a(WebDataBinder binder) {
  binder.setFieldDefaultPrefix("a.");
}

@InitBinder(“b”) 注解表示該方法用來(lái)處理和Book和相關(guān)的參數(shù),在方法中,給參數(shù)添加一個(gè) b 前綴,即請(qǐng)求參數(shù)要有b前綴.

3.發(fā)送請(qǐng)求

請(qǐng)求發(fā)送時(shí),通過(guò)給不同對(duì)象的參數(shù)添加不同的前綴,可以實(shí)現(xiàn)參數(shù)的區(qū)分.

總結(jié)

這就是松哥給大伙介紹的 @ControllerAdvice 的幾個(gè)簡(jiǎn)單用法,這些點(diǎn)既可以在傳統(tǒng)的 SSM 項(xiàng)目中使用,也可以在 Spring Boot + Spring Cloud 微服務(wù)中使用,歡迎大家有問題一起討論。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java計(jì)算百分比的各種方法總結(jié)

    Java計(jì)算百分比的各種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java計(jì)算百分比的各種方法,要計(jì)算百分比并保留兩位小數(shù),首先需要明確計(jì)算公式和java語(yǔ)言的數(shù)學(xué)計(jì)算方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • jvm原理之SystemGC源碼分析

    jvm原理之SystemGC源碼分析

    這篇文章主要介紹了jvm源碼分析之SystemGC的完全解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-01-01
  • SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn)

    SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 通過(guò)jstack分析解決進(jìn)程死鎖問題實(shí)例代碼

    通過(guò)jstack分析解決進(jìn)程死鎖問題實(shí)例代碼

    這篇文章主要介紹了通過(guò)jstack分析解決進(jìn)程死鎖問題實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 超詳細(xì)的IntelliJ IDEA的安裝及配置

    超詳細(xì)的IntelliJ IDEA的安裝及配置

    這篇文章主要介紹了超詳細(xì)的IntelliJ IDEA的安裝及配置,文中有非常詳細(xì)的圖文示例,對(duì)想要安裝IDEA的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中輸入被跳過(guò)情況的深入探究

    Java中輸入被跳過(guò)情況的深入探究

    這篇文章主要給大家介紹了關(guān)于Java中輸入被跳過(guò)情況的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實(shí)現(xiàn)二叉堆、大頂堆和小頂堆

    Java實(shí)現(xiàn)二叉堆、大頂堆和小頂堆

    二叉堆就是完全二叉樹,或者是靠近完全二叉樹結(jié)構(gòu)的二叉樹。大頂堆要求對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),它的左右節(jié)點(diǎn)都比它??;小頂堆要求對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),它的左右節(jié)點(diǎn)都比它大。本文將用Java分別實(shí)現(xiàn)二叉堆、大頂堆和小頂堆。需要的可以參考一下
    2022-01-01
  • 解決IDEA集成Docker插件后出現(xiàn)日志亂碼的問題

    解決IDEA集成Docker插件后出現(xiàn)日志亂碼的問題

    這篇文章主要介紹了解決IDEA集成Docker插件后出現(xiàn)日志亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 使用MyBatis查詢千萬(wàn)級(jí)數(shù)據(jù)量操作實(shí)現(xiàn)

    使用MyBatis查詢千萬(wàn)級(jí)數(shù)據(jù)量操作實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何使用MyBatis?查詢千萬(wàn)數(shù)據(jù)量的操作過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java爬蟲實(shí)現(xiàn)Jsoup利用dom方法遍歷Document對(duì)象

    Java爬蟲實(shí)現(xiàn)Jsoup利用dom方法遍歷Document對(duì)象

    本文主要介紹了Java爬蟲實(shí)現(xiàn)Jsoup利用dom方法遍歷Document對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論

成都市| 瑞安市| 南涧| 博罗县| 绥宁县| 陈巴尔虎旗| 雷山县| 临湘市| 崇文区| 安远县| 临沧市| 鄂托克旗| 凤山县| 五常市| 兴国县| 会理县| 尖扎县| 凤山市| 东光县| 荥阳市| 澎湖县| 乌兰浩特市| 泰顺县| 浮梁县| 永胜县| 璧山县| 壤塘县| 横山县| 武山县| 永年县| 东乡| 黄龙县| 固安县| 龙胜| 西乌珠穆沁旗| 新乡县| 汶川县| 广昌县| 正蓝旗| 平罗县| 忻州市|