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

SpringMVC @ControllerAdvice使用場景

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

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

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

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

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

全局異常處理

使用 @ControllerAdvice 實現(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;
  }
}

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

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

全局數(shù)據(jù)綁定

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

使用步驟,首先定義全局數(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 注解標記該方法的返回數(shù)據(jù)是一個全局數(shù)據(jù),默認情況下,這個全局數(shù)據(jù)的 key 就是返回的變量名,value 就是方法返回值,當然開發(fā)者可以通過 @ModelAttribute 注解的 name 屬性去重新指定 key。

定義完成后,在任何一個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";
  }
}

全局數(shù)據(jù)預(yù)處理

考慮我有兩個實體類,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ù)據(jù)添加接口,如下:

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

這個時候,添加操作就會有問題,因為兩個實體類都有一個 name 屬性,從前端傳遞時 ,無法區(qū)分。此時,通過 @ControllerAdvice 的全局數(shù)據(jù)預(yù)處理可以解決這個問題

解決步驟如下:

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

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

2.進行請求數(shù)據(jù)預(yù)處理

在 @ControllerAdvice 標記的類中添加如下代碼:

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

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

3.發(fā)送請求

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

總結(jié)

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

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

相關(guān)文章

  • Java設(shè)計模式之享元模式示例詳解

    Java設(shè)計模式之享元模式示例詳解

    享元模式(FlyWeight?Pattern),也叫蠅量模式,運用共享技術(shù),有效的支持大量細粒度的對象,享元模式就是池技術(shù)的重要實現(xiàn)方式。本文將通過示例詳細講解享元模式,感興趣的可以了解一下
    2022-03-03
  • Java-IO流實驗

    Java-IO流實驗

    流是一種抽象概念,它代表了數(shù)據(jù)的無結(jié)構(gòu)化傳遞。。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出,希望能給您帶來幫助
    2021-06-06
  • Java四種常用線程池的詳細介紹

    Java四種常用線程池的詳細介紹

    今天小編就為大家分享一篇關(guān)于Java四種常用線程池的詳細介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java實現(xiàn)搶紅包算法(公平版和手速版)

    java實現(xiàn)搶紅包算法(公平版和手速版)

    這篇文章主要為大家詳細介紹了java實現(xiàn)搶紅包算法,分為公平版和手速版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法

    Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法

    這篇文章主要介紹了Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法,文中舉了用其啟動線程和設(shè)置線程優(yōu)先級的例子,需要的朋友可以參考下
    2016-03-03
  • Java 對 Properties 文件的操作詳解及簡單實例

    Java 對 Properties 文件的操作詳解及簡單實例

    這篇文章主要介紹了Java 對 Properties 文件的操作詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    這篇文章將通過Java實現(xiàn)一個簡答的圖書管理系統(tǒng),本圖書管理系統(tǒng)用對象數(shù)組的方式來提供操作方法,比較特別,建議新手學(xué)習(xí),這對理解Java面向?qū)ο笥泻艽髱椭?/div> 2022-11-11
  • spring cloud整合ribbon問題及解決方案

    spring cloud整合ribbon問題及解決方案

    很多小伙伴在整合ribbon都出了相同的問題,今天特地為大家整理了該問題的解決方案,文中有非常詳細的圖文解說,對出現(xiàn)同樣問題的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Dubbo+zookeeper搭配分布式服務(wù)的過程詳解

    Dubbo+zookeeper搭配分布式服務(wù)的過程詳解

    Dubbo作為分布式架構(gòu)比較后的框架,同時也是比較容易入手的框架,適合作為分布式的入手框架,下面是簡單的搭建過程,對Dubbo+zookeeper分布式服務(wù)搭建過程感興趣的朋友一起看看吧
    2022-04-04
  • java中拼接字符串的5種方法效率對比

    java中拼接字符串的5種方法效率對比

    這篇文章主要給大家介紹了關(guān)于java中拼接字符串的5種方法效率對比的相關(guān)資料,文中通過示例代碼和圖片介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評論