SpringMVC常用註解

1.@RequestParam

作用:把請求中的指定名稱的參數傳遞給控制器中的形參賦值
屬性:

  1. value:請求參數中的名稱
  2. required:請求參數中是否必須提供此參數,默認值是true,必須提供
<a href="anno/testRequestParam?username=zhangsan">@RequestParam</a>

@Controller
@RequestMapping("/anno")
public class AnnoController {
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("username") String name) {
        System.out.println("執行了");
        System.out.println(name);
        return "success";
    }
}

顯示結果
執行了
zhangsan

2. @RequestBody

作用:用於獲取請求體的內容(不支持get請求)
屬性:

  1. required:是否必須有請求體,默認值是true
<form action="anno/testRequestBody" method="post">
    <table>
        <tr>
            <td>用戶名:</td>
            <td><input type="text" name="uName"></td>
        </tr>
        <tr>
            <td>年齡:</td>
            <td><input type="text" name="uAge"></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="保存"></td>
        </tr>
    </table>
</form>

@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
    System.out.println("執行了");
    System.out.println(body);
    return "success";
}

顯示結果
執行了
uName=zs&uAge=18

3.@PathVariable

作用:綁定url中的佔位符
屬性:

  1. value:指定url中的佔位符名稱
Restful風格的URL

請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法

restful風格的URL優點
  1. 結構清晰
  2. 符合標準
  3. 易於理解
  4. 擴展方便
<a href="anno/testPathVariable/100">@PathVariable</a>

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") String id) {
    System.out.println("執行了");
    System.out.println(id);
    return "success";
}

顯示結果
執行了
100

4. @RequestHeader

作用:獲取指定請求頭的值
屬性:

  1. value:請求頭的名稱
<a href="anno/testRequestHeader">@RequestHeader</a>

@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
    System.out.println("執行了");
    System.out.println(header);
    return "success";
}

顯示結果
執行了
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

5.@CookieValue

作用:用於獲取指定cookie的名稱的值
屬性

  1. value:cookie的名稱
<a href="anno/testCookieValue">@CookieValue</a>

@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookie) {
    System.out.println("執行了");
    System.out.println(cookie);
    return "success";
}

顯示結果
執行了
00B30279E30ED89F28819B23DA74C5AB

6.@ModelAttribute

作用:

  1. 出現在方法上:表示當前方法會在控制器方法執行前線執行
  2. 出現在參數上:獲取指定的數據給參數賦值

應用場景:

  1. 當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
public class User implements Serializable {
    private String uName;
    private Integer uAge;
    private Date birthday;
}

<form action="anno/testModelAttribute" method="post">
    <table>
        <tr>
            <td>用戶名:</td>
            <td><input type="text" name="uName"></td>
        </tr>
        <tr>
            <td>年齡:</td>
            <td><input type="text" name="uAge"></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="保存"></td>
        </tr>
    </table>
</form>

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
    System.out.println("執行了");
    System.out.println(user);
    return "success";
 }

//有返回值
@ModelAttribute
public User complementUser(String uName){
    //當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
    //模擬根據uName從數據庫查詢出的User
    User user = new User();
    user.setuName(uName);
    user.setuAge(30);
    user.setBirthday(new Date());
    return user;
}   

顯示結果
執行了
User{uName='張三', uAge='12', birthday=Tue Aug 06 15:36:35 CST 2019} 


@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "用戶001") User user) {
    System.out.println("執行了");
    System.out.println(user);
     return "success";
}
    
//無返回值
@ModelAttribute
public void complementUser(String uName, Map<String, User> map) {
    //當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
    //模擬根據uName從數據庫查詢出的User
    User user = new User();
    user.setuName(uName);
    user.setuAge(30);
    user.setBirthday(new Date());
    map.put("用戶001", user);
}

顯示結果
執行了
User{uName='張三', uAge='15', birthday=Tue Aug 06 15:46:06 CST 2019}

7.@SessionAttributes

作用:用於多次執行控制器方法間的參數共享
屬性:

  1. value:指定存入屬性的名稱
@SessionAttributes(value = {"message"})//該註解只能作用於類上
public class AnnoController {}

@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
    System.out.println("執行了");
    model.addAttribute("message", "張三");
    return "success";
}

@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
    System.out.println("執行了");
    String message = (String) modelMap.get("message");
    System.out.println(message);
    return "success";
}
@RequestMapping("/deleteSessionAttributes")
public String deleteSessionAttributes(SessionStatus status) {
    System.out.println("執行了");
    status.setComplete();
    return "success";
}

<a href="anno/testSessionAttributes">@SessionAttributes</a>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
<a href="anno/deleteSessionAttributes">deleteSessionAttributes</a>
頁面及顯示結果
anno.jsp

在這裏插入圖片描述

點擊第一個超鏈接(用於存值)

在這裏插入圖片描述

控制檯打印

在這裏插入圖片描述

點擊第二個超鏈接(用於獲取Session中的值)

在這裏插入圖片描述

點擊第三個超鏈接(用於刪除Session中的值)

在這裏插入圖片描述

再次點擊第二個超鏈接控制檯打印

在這裏插入圖片描述

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