轉自:
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前綴
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491776.html
標籤:Java
上一篇:fastJson如何將json與物件、集合、陣列相互轉換呢?
下一篇:面試官:你能寫個LRU快取嗎?
