一、常用註解介紹
【1】@RequestMapping
可以放置在方法和類上。放在方法上,表示將當前方法註冊爲Controller類,當訪問指定路徑時,執行此方法。放在類上,則配置的路徑會作爲這個類中所有處理器的路徑的父路徑使用。
常用屬性
value | 指定要將當前處理器綁定到哪個訪問路徑上;可以配置多個路徑;路徑中也可以使用*號作爲通配符匹配部分路徑 |
method | 指定當前處理器處理哪種提交方式提交的請求。method= RequestMethod.POST |
params |
用來限定當前請求中必須包含指定名稱的請求參數纔會被當前處理器處理。 通過params屬性指定只處理請求參數符合指定要求的請求 1、只指定名稱,要求必須具有該名稱的請求參數 |
headers |
用來限定當前請求中必須包含指定名稱的請求頭纔會被當前處理器處理 格式和params一致 |
produces | 用來響應請求的媒體類型,可以設置響應編碼類型和返回內容格式(JSON、text等等) |
【2】@RequestParam
用於綁定參數,可將傳遞過來的參數綁定到指定參數身上
示例:
@RequestParam(value="age",required=false,defaultValue="18")int age,
常用屬性:
value | 傳遞的參數名稱, |
required | 表示是否具有傳遞的參數,如果沒有傳遞該參數,則會報錯。默認爲true,表示必須傳遞該參數,false,則表示該參數可傳可不傳 |
defaultValue |
默認值,表示當沒有傳遞過來的參數,則將默認值綁定到指定參數上 |
【3】@PathVariable
表示佔位符,可以動態的獲取路徑上的信息,支持Restful風格路徑
示例:
@RequestMapping("/test05/{username}/{age}.action")
public void test05(@PathVariable("username") String name,
@PathVariable("age") int age) {
System.out.println(name+"~"+age);
}
【4】@SessionAttributes
在多個請求之間共用數據,將指定的對象,複製一份存入到session域中。放置在類上。
常用屬性:
value | 想要存入參數的名稱 |
types |
想要存入參數的類型 |
value與types之間屬於並集關係,表示與value名稱一致的對象存入到session域中,與types類型一致的對象也存放到session域中。
示例:
@SessionAttributes(value="country",types=String.class)
public class MyController3{
@RequestMapping("/{username}/test02.action")
public String test02(Model model){
model.addAttribute("country","上海");
return "test_3_02";
}
}
【5】@ExceptionHandler
標註在方法上,表示該方法爲異常處理方法,當在該類中出現異常時,則會跳到該方法中。根據方法的邏輯,進行處理異常。
示例:
@ExceptionHandler
public String exceptionEvent(Exception e){
return "err";
}
出現異常後跳轉到err.jsp界面
注意:標註的方法一定要接收Exception對象
【6】@ControllerAdvice
對全局的Controller進行增強,可以進行配置全局異常信息(與@ExceptionHandler),進行全局信息綁定(與@ModelAttribute),進行全局數據預處理(與@InitBinder)。
示例:配置全局異常信息處理
@ControllerAdvice
public class GlobalExceptionHandle {
@ExceptionHandler
public String exceptionEvent(Exception e){
return "err";
}
}
【7】@ResponseBody
表示該方法的放回值,如果是字符串,則將該字符串寫入到界面上,如果是對象,則對象以json串的形式寫入到客戶端。
示例:
@ResponseBody
@RequestMapping(value="/test02.action",produces="text/html;charset=utf-8")
public String test02() throws Exception {
return "我愛你中國";
}
@ResponseBody
@RequestMapping(value="/test01.action",produces="application/json;charset=utf-8")
public Dog test01() throws Exception {
Dog dog = new Dog("aaa",18);
return dog;
}
produces只是爲了防止中文亂碼的出現,如果大家想處理全局請求與響應亂碼,請參考:https://blog.csdn.net/c17315377559/article/details/101940087
【8】@ModelAttribute
使用在方法上 ,則被修飾的方法將會在當前類的任意handler方法執行之前執行,該方法返回的返回值會自動存入model供後續使用。
使用在方法參數之前,則會從model中獲取屬性值賦值到被修飾的方法參數上。
示例:
使用在方法上
@RequestMapping(value="/test05.action")
@ModelAttribute("name")
public String test05(){
return "bzh";
}
此時,name=“bzh”將注入到model中,默認是request域中
使用在屬性上
@RequestMapping(value="/test04.action")
public void test04(@ModelAttribute("country") String country){
System.out.println("country:" + country);
}
此時,則會從model中獲取屬性country並值賦值到被修飾的方法參數上。
注意:如果該類被@SessionAttributes 修飾的話,則會存入到session域中,同樣也是從session域中獲取。
【9】@InitBinder
爲當前控制器註冊一個屬性編輯器,綁定數據格式,只對當前的Controller有效。
示例:日期格式處理,瀏覽器中日期的格式是yyyy-MM-dd,而Springmvc的日期格式是yyyy/MM/dd,所以接收日期格式要轉化一下
@InitBinder
public void InitDate(ServletRequestDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
【10】@CookieValue
可以將請求中的指定名稱的cookie賦值給指定方法參數
示例:
@RequestMapping(value="/test03.action")
public void test03(@CookieValue("JSESSIONID") String id) {
System.out.println(id);
}
二、請求轉發與重定向的實現
請求轉發使用的關鍵字是forward
重定向使用的關鍵字是redirect
如果,不使用以上兩個關鍵字,則Springmvc會根據視圖解析器,轉發到:前綴名+返回值+後綴名這個頁面。
示例:
請求轉發:
@RequestMapping("/test01.action")
public String test01(HttpServletResponse response) throws IOException{
return "forward:/my01/test01.action";
}
請求重定向:
@RequestMapping("/test02.action")
public String test02(HttpServletRequest request) throws IOException{
return "redirect:/index.jsp";
}
路徑依據的是項目的根路徑。
三、錯誤界面配置
【1】當前類的錯誤界面處理可以根據@ExceptionHandle註解
【2】使用類控制全局錯誤界面處理可以使用@ControllerAdvice+@ExceptionHandle進行配置
【3】在SpringMvc.xml中書寫以下代碼,也可以作爲全局異常處理的方法
<bean id="" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">null_err</prop>
<prop key="java.lang.Throwable">err</prop>
</props>
</property>
</bean>