@ 一.前言 使用PyQt5模仿網易雲音樂,只有UI沒有功能。 二.展示-主界面 1.靜圖1 主界面 2.靜圖2 主界面-歌單 3.靜圖3 主界面-播客 3.靜圖3 主界面-最新音樂 4.動圖1 主界面-綜合動圖展示 三.展示-登錄界面 仿照製作了一個登錄頁面(二維碼是可以掃描的,並且具有時效性哦~ ...
轉自:
http://www.java265.com/JavaFramework/SpringMVC/202204/2941.html
下文筆者講述Spring MVC中@ControllerAdvice註解的功能簡介說明,如下所示:
@ControllerAdvice的功能 用於Controller增強功能實現,它可實現以下三種功能 全局異常處理 全局數據綁定 全局數據預處理
例:
全局異常處理
使用 @ControllerAdvice 實現全局異常處理,只需要定義類,添加該註解即可定義方式如下:
@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; } } 註意事項: 在這個類中,我們可定義多個方法,用於處理不同的異常 如:處理空指針 處理數組越界
全局數據綁定
全局數據綁定功能可以用來做一些初始化的數據操作
我們可以將一些公共的數據定義在添加了 @ControllerAdvice 註解的類中
這樣,在每一個 Controller 的介面中,就都能夠訪問導致這些數據。 例:
@ControllerAdvice public class MyGlobalExceptionHandler { @ModelAttribute(name = "webInfo") public Map<String,Object> mydata() { HashMap<String, Object> map = new HashMap<>(); map.put("webSiteName", "java最牛的網站"); map.put("address", "http://java265.com"); return map; } } Controller中使用map @RestController public class HelloController { @GetMapping("/hello") public String hello(Model model) { Map<String, Object> map = model.asMap(); System.out.println(map); } }
全局數據預處理
兩個實體類 Book 和 Author public class Book { private String name; private Long price; //getter/setter } public class Author { private String name; private Integer age; //getter/setter } //定義一個Controller @PostMapping("/book") public void addBook(Book book, Author author) { System.out.println(book); System.out.println(author); } 此時屬性裡面存在兩個name,前端數據則無法區別,此時我們可藉助@ControllerAdvice中的全局數據預處理 例: 1.給介面中的變數取別名 @PostMapping("/book") public void addBook(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) { System.out.println(book); System.out.println(author); } 2.進行請求數據預處理 在 @ControllerAdvice 標記的類中添加如下代碼: @InitBinder("b") public void b(WebDataBinder binder) { binder.setFieldDefaultPrefix("b."); } @InitBinder("a") public void a(WebDataBinder binder) { binder.setFieldDefaultPrefix("a."); } @InitBinder("b") 註解表示該方法用來處理和Book和相關的參數,在方法中,給參數添加一個 b 首碼,即請求參數要有b首碼