SpringMVC 學習筆記心得(四)常用註解詳解

在springmvc中,許多註解能夠幫助我們大大提高開發效率,這裏小編講述一下最常見的七種註解

1. RequestParam註解

  1. 作用:把請求中的指定名稱的參數傳遞給控制器中的形參賦值
  2. 屬性
    1. value:請求參數中的名稱
    2. required:請求參數中是否必須提供此參數,默認值是true,必須提供

概念引導:

/* 接收請求  @return */ 
@RequestMapping(path="/testParam")
 public String testParam(@RequestParam(value="username",required=false)String name)  {
   System.out.println(name); 
   return "success";
   }

注意:傳值要與註解中的參數對應,否則將不會被自動封裝上,則會變成null值,2.當添加了註解required=false,如果不參入參數也不會拋出400請求錯誤,如果不添加,默認需要傳入參數,否則會報400錯誤


2. RequestBody註解

  1. 作用:用於獲取請求體的內容(注意:get方法不可以)
  2. 屬性
    required:是否必須有請求體,默認值是true

2.1 引導案例:

  @RequestMapping(value = "/testBody")
    public String testBody(@RequestBody String body){
        System.out.println("testBody Method ... ");
        System.out.println(body);
        return "success";
    }

2.2 表單內容如下:

<form action="/test/testBody" method="post">

    姓名:<input type="text" name="username" />
    密碼:<input type="text" name="password" />
    金額:<input type="text" name="money" />
    <input type="submit" value="提交" />

</form>

2.3 提交頁面:
在這裏插入圖片描述

輸出結果:
testBody Method …
username=%C3%A7%C2%BD%C2%97%C3%A4%C2%B8%C2%BD%C3%A4%C2%B8%C2%9D%C3%A5%C2%A1%C2%94&password=1024&money=200.5

2.4 注意:解決亂碼的問題:在web.xml中配置

<!-- 配置過濾器  -->

  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

deploy服務器,輸出結果:
testBody Method …
username=羅麗絲塔&password=1024&money=200.5

3. PathVariable註解

  1. 作用:擁有綁定url中的佔位符的。例如:url中有/delete/{id},{id}就是佔位符
  2. 屬性
    1. value:指定url中的佔位符名稱
  3. Restful風格的URL
    1. 請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法
    2. restful風格的URL優點
      1. 結構清晰
      2. 符合標準
      3. 易於理解
      4. 擴展方便

3.1 引導案例:

@RequestMapping("/testVaripoty/{id}")
    public String testVaripoty(@PathVariable(name = "id") String id){
        System.out.println("testVaripoty Method ... ");
        System.out.println(id);
        return "success";
    }

3.2 傳值測試:

<a href="testVaripoty/100">測試PathVariable</a>

3.3 結果輸出:

testVaripoty Method ... 
100

這裏注意:這裏的寫法格式是/路徑/{參數名},在傳值的時候也是“路徑/值”,在傳參數的時候不要習慣性的把 ‘ / ’ 寫成 ’?‘

4. RequestHeader註解

  1. 作用:獲取指定請求頭的值
  2. 屬性
    value:請求頭的名稱

4.1 引導案例:

@RequestMapping(path="/testHeader") 
		public String testHeader(@RequestHeader(value="Accept") String header) { 
		System.out.println(header);
		 return "success"; 
 }

5. CookieValue註解

  1. 作用:用於獲取指定cookie的名稱的值
  2. 屬性
    value:cookie的名稱

5.1 引導案例:

@RequestMapping(path="/testCookie") 
public String testCookie(@CookieValue(value="JSESSIONID") String cookieValue) { 
System.out.println(cookieValue); 
return "success"; 
}

5.2 注意:JSESSIONID是固定寫法,在瀏覽器中可以看到的,這裏寫錯了也是獲取不到的

6. ModelAttribute註解

  1. 作用
    1. 出現在方法上:表示當前方法會在控制器方法執行前線執行。
  2. 出現在參數上:獲取指定的數據給參數賦值。
  3. 兩種實現方式:@ModelAttribute中設置返回對象 ; 使用map集合 + @ModelAttribute ( value = key) 的形式 完成

6.1 引導案例:(返回對象方式)

 @ModelAttribute
    public UserAccount firModol(String username){
        System.out.println("welcome ..." + username);
        //模擬查詢數據庫操作
        UserAccount userAccount = new UserAccount();
        userAccount.setUsername(username);
        userAccount.setPassword("1234465");
        return userAccount;
    }

    @RequestMapping("/testModolAttribute")
    public String testModolAttribute(UserAccount userAccount){
        System.out.println(userAccount);
        return "success";
    }

6.2 表單填寫:

在這裏插入圖片描述

輸出結果:
welcome …羅麗絲塔
UserAccount{username=‘羅麗絲塔’, password=‘33333’, money=null}

這裏小編對爲什麼密碼是33333做一個解釋,@ModelAttribute表示最先被執行,小編在裏面設置了密碼,模擬查詢數據庫,但是此時小編提交的新的數據過來,於是將原來的數據覆蓋了,就變成了表格中填寫的數據,有點類似於修改個人資料的操作

6.3 引導案例(MAP+@ModelAttribute)

@ModelAttribute
    public void firModol(String username , Map<String , UserAccount> map){
        System.out.println("welcome ..." + username);
        UserAccount userAccount = new UserAccount();
        userAccount.setUsername(username);
        userAccount.setPassword("1234465");
        map.put("userAccounts",userAccount);
    }

    @RequestMapping("/testModolAttribute")
    public String testModolAttribute(@ModelAttribute(value = "userAccounts") UserAccount userAccount){
        System.out.println(userAccount);
        return "success";
    }

6.4 form表單填寫:
在這裏插入圖片描述
6.5 輸出結果:

welcome ...奧尼斯汀
UserAccount{username='奧尼斯汀', password='1024', money=null}

7. SessionAttributes註解

  1. 作用:用於多次執行控制器方法間的參數共享
  2. 屬性
    value:指定存入屬性的名稱

7.1 引導案例:創建TestSessionAttributes類

@Controller
@SessionAttributes(value = "msg")//將msg存入Session域中
public class TestSessionAttributes {

    @RequestMapping("/setSessionAttribute")
    //Model底層實現就是存入request域中
    public String setSessionAttribute(Model model){
        System.out.println("setSessionAttribute  ...");
         model.addAttribute("msg","美美");
        return "success";
    }
}

7.2 獲取session

@RequestMapping("/getSessionAttribute")
    public String getSessionAttribute(ModelMap modelmap){
        System.out.println("getSessionAttribute  ...");
        String msg = (String) modelmap.get("msg");
        System.out.println("msg : " + msg);
        return "success";
    }

7.3 刪除Session域

@RequestMapping("/delSessionAttribute")
    public String delSessionAttribute(SessionStatus sessionStatus){
        System.out.println("delSessionAttribute  ...");
        sessionStatus.setComplete();
        return "success";
    }

7.4 jsp頁面編寫

<a href="setSessionAttribute">setSessionAttribute</a>
<a href="getSessionAttribute">getSessionAttribute</a>
<a href="delSessionAttribute">delSessionAttribute</a>

7.5 success界面編寫(注意不要忽略isELIgnored=false)

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Success</h1>

${msg}

${sessionScope}

</body>
</html>

7.6 頁面測試

7.6.1 點擊setSessionAttribute

在這裏插入圖片描述

7.6.2 點擊getSessionAttribute

在這裏插入圖片描述

7.6.3 點擊delSessionAttribute

在這裏插入圖片描述
這裏還有個美美是因爲request域中沒有被清除,但是session域中已經被清楚了

這裏就是常用的七大註解了,如有講錯的地方歡迎大家指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章