(SpringMVC)常用註解

一、RequestParam

作用:把請求中指定名稱的參數給控制器中的形參賦值。
屬性:
	value: 請求參數中的名稱。
	required:請求參數中是否必須提供此參數。 默認值: true。表示必須提供,如果不提供將報錯。

正常情況下,接收的參數username必須和傳遞參數name的名字對應,才能正確接收,但是通過@RequestParam,可以保持它與引入參數時的name 一致,而參數username這裏可以用其他的名字。
在這裏插入圖片描述

jsp 中的代碼:
<!-- requestParams 註解的使用 -->
<a href="springmvc/useRequestParam?name=test">requestParam 註解</a>

在這裏插入圖片描述

二、RequestBody

作用:用於獲取請求體內容。 直接使用得到是 key=value&key=value...結構的數據。
get 請求方式不適用。
屬性:
	required:是否必須有請求體。默認值是:true。當取值爲 true,get 請求方式會報錯。如果取值
爲 false, get 請求得到是 null。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、PathVaribale

作用:
用於綁定 url 中的佔位符。 例如:請求 url 中 /delete/{id}, 這個{id}就是 url 佔位符。
url 支持佔位符是 spring3.0 之後加入的。是 springmvc 支持 rest 風格 URL 的一個重要標誌。

屬性:
value: 用於指定 url 中佔位符名稱。
required:是否必須提供佔位符。

在這裏插入圖片描述

四、RequestHeader

注:在實際開發中一般不怎麼用。

作用:用於獲取請求消息頭。
屬性:
	value:提供消息頭名稱
	required:是否必須有此消息頭
jsp 中代碼:
<!-- RequestHeader 註解 -->
<a href="springmvc/useRequestHeader">獲取請求消息頭</a>
控制器中代碼:
/**
* RequestHeader 註解
* @param user
* @return
*/
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value="Accept-Language",
	required=false)String requestHeader){
	System.out.println(requestHeader);
	return "success";
}

在這裏插入圖片描述

五、CookieValue

作用:用於把指定 cookie 名稱的值傳入控制器方法參數。
屬性:
	value:指定 cookie 的名稱。
	required:是否必須有此 cookie。
jsp 中的代碼:
<!-- CookieValue 註解 -->
<a href="springmvc/useCookieValue">綁定 cookie 的值</a>
控制器中的代碼:
/**
* Cookie 註解註解
* @param user
* @return
*/
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value="JSESSIONID",required=false)
String cookieValue){
	System.out.println(cookieValue);
	return "success";
}

在這裏插入圖片描述

六、ModelAttribute

作用:該註解是 SpringMVC4.3 版本以後新加入的。它可以用於修飾方法和參數。
	出現在方法上,表示當前方法會在控制器的方法執行之前,先執行。它可以修飾沒有返回值的方法,也可
以修飾有具體返回值的方法。
	出現在參數上,獲取指定的數據給參數賦值。
	
屬性:
	value:用於獲取數據的 key。 key 可以是 POJO 的屬性名稱,也可以是 map 結構的 key。
	
應用場景:當表單提交數據不是完整的實體類數據時,保證沒有提交數據的字段使用數據庫對象原來的數據。

例如:
我們在編輯一個用戶時,用戶有一個創建信息字段,該字段的值是不允許被修改的。 
在提交表單數據是肯定沒有此字段的內容,一旦更新會把該字段內容置爲 null,此時就可以使用此註解解決問題。

(1)ModelAttribute 修飾方法帶返回值

<!-- request body 註解 -->
<form action="anno/testModelAttribute" method="post">
    用戶姓名:<input type="text" name="uname" /><br/>
    用戶年齡:<input type="text" name="age" /><br/>
    <input type="submit" value="提交" />
</form>

可以看到 form 表單中只傳入了兩個值,並未對 Date 數據賦值

@Controller
@RequestMapping("/anno")
public class AnnoController {
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("執行了...");
        System.out.println(user);
        return "success";
    }
    @ModelAttribute
    public User showModel(String uname) {
        System.out.println("showUser執行了...");
        // 通過用戶查詢數據庫(模擬)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setBirthday(new Date());
        return user;
    }
}

在這裏插入圖片描述
(2)ModelAttribute 修飾方法不帶返回值

jsp 中的代碼:
<!-- 修改用戶信息 -->
<form action="springmvc/updateUser" method="post">
用戶名稱: <input type="text" name="username" ><br/>
用戶年齡: <input type="text" name="age" ><br/>
<input type="submit" value="保存">
</form>
@Controller
@RequestMapping("/anno")
public class AnnoController {

    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(@ModelAttribute("key") User user){
        System.out.println("執行了...");
        System.out.println(user);
        return "success";
    }
    @ModelAttribute
    public void showModel(String uname, Map<String, User> map) {
        System.out.println("showUser執行了...");
        // 通過用戶查詢數據庫(模擬)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setBirthday(new Date());
        map.put("key",user);
    }
}

七、SessionAttribute

作用:用於多次執行控制器方法間的參數共享。
屬性:
	value:用於指定存入的屬性名稱
	type:用於指定存入的數據類型。
jsp 中的代碼:
<!-- SessionAttribute 註解的使用 -->
<a href="anno/testSessionAttributes">testSessionAttributes</a>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
<a href="anno/delSessionAttributes">delSessionAttributes</a>
/**
 * 常用註解
 */
@Controller
@RequestMapping("/anno")
// 把數據存入到session域對象中
@SessionAttributes(value= {"username","password","age"},types= {String.class,Integer.class})
public class AnnoController {

    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        System.out.println("testSessionAttributes...");
        // 底層會存儲到request域對象中
        model.addAttribute("username", "泰斯特");
        model.addAttribute("password","123456");
        model.addAttribute("age", 31);
        return "success";
    }
    /**
     * 獲取值
     * @param modelMap
     * @return
     */
    @RequestMapping(value = "/getSessionAttributes")
    public String getSessionAttributes(ModelMap modelMap) {
        System.out.println("getSessionAttributes...");
        String msg = (String) modelMap.get("username");
        System.out.println(msg);
        return "success";
    }

    /**
     * 清除
     * @param status
     * @return
     */
    @RequestMapping(value = "/delSessionAttributes")
    public String delSessionAttributes(SessionStatus status) {
        System.out.println("delSessionAttributes...");
        status.setComplete();
        return "success";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章