SpingMVC的常用注解
### 1.RequestMapping注解
- RequestMapping注解的作用是建立請(qǐng)求URL和處理方法之間的對(duì)應(yīng)關(guān)系
- RequestMapping注解可以作用在方法和類上
1. 作用在類上:第一級(jí)的訪問(wèn)目錄
2. 作用在方法上:第二級(jí)的訪問(wèn)目錄
3. 細(xì)節(jié):路徑可以不編寫(xiě) / 表示應(yīng)用的根目錄開(kāi)始
4. ==細(xì)節(jié):${ pageContext.request.contextPath }也可以省略不寫(xiě),但是路徑上不能寫(xiě)/==
- RequestMapping的屬性
1. path 指定請(qǐng)求路徑的url
2. value value屬性和path屬性是一樣的
3. mthod 指定該方法的請(qǐng)求方式
4. params 指定限制請(qǐng)求參數(shù)的條件
5. headers 發(fā)送的請(qǐng)求中必須包含的請(qǐng)求頭
### 2.RequestParam注解
- 把請(qǐng)求中的指定名稱的參數(shù)傳遞給控制器中的形參賦值
- 屬性
1. value:請(qǐng)求參數(shù)中的名稱
2. required:表示請(qǐng)求參數(shù)中是否必須提供此參數(shù),默認(rèn)值是true,必須提供
```java
public String sayHello(@RequestParam(value="username",required=false)String name)
```
### 3.RequestBody注解
- 用于獲取請(qǐng)求體的內(nèi)容(注意:get方法不可以)
- 屬性:required:是否必須有請(qǐng)求體,默認(rèn)值是true
```java
public String sayHello(@RequestBody(required=false) String body)
```
### 4.PathVariable注解
- 擁有綁定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 屬性:value:指定url中的占位符名稱
```java
public String sayHello(@PathVariable(value="id") String id)
```
**Restful風(fēng)格的URL**
1. 請(qǐng)求路徑一樣,可以根據(jù)不同的請(qǐng)求方式去執(zhí)行后臺(tái)的不同方法
2. restful風(fēng)格的URL優(yōu)點(diǎn)
- 結(jié)構(gòu)清晰
- 符合標(biāo)準(zhǔn)
- 易于理解
- 擴(kuò)展方便
### 5.RequestHeader注解
- 獲取指定請(qǐng)求頭的值
- 屬性:value:請(qǐng)求頭的名稱
```java
public String sayHello(@RequestHeader(value="Accept") String header)
```
### 6.CookieValue注解
- 用于獲取指定cookie的名稱的值
- 屬性:value:cookie的名稱
```java
public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue)
```
### 7.ModelAttribute注解
- 作用
1. 出現(xiàn)在方法上:表示當(dāng)前方法會(huì)在控制器方法執(zhí)行前線執(zhí)行。
2. 出現(xiàn)在參數(shù)上:獲取指定的數(shù)據(jù)給參數(shù)賦值。
- 應(yīng)用場(chǎng)景:當(dāng)提交表單數(shù)據(jù)不是完整的實(shí)體數(shù)據(jù)時(shí),保證沒(méi)有提交的字段使用數(shù)據(jù)庫(kù)原來(lái)的數(shù)據(jù)。
**修飾的方法有返回值**
```java
/**
* 作用在方法,先執(zhí)行
* @param name
* @return
*/
@ModelAttribute
public User showUser(String name) {
System.out.println("showUser執(zhí)行了...");
// 模擬從數(shù)據(jù)庫(kù)中查詢對(duì)象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
return user;
}
/**
* 修改用戶的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(User user) {
System.out.println(user);
return "success";
}
```
**修飾的方法沒(méi)有返回值**
```java
/**
* 作用在方法,先執(zhí)行
* @param name
* @return
*/
@ModelAttribute
public void showUser(String name,Map
System.out.println("showUser執(zhí)行了...");
// 模擬從數(shù)據(jù)庫(kù)中查詢對(duì)象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
map.put("abc", user);
}
/**
* 修改用戶的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(@ModelAttribute(value="abc") User user) {
System.out.println(user);
return "success";
}
```
**ModelAttribute注釋一個(gè)方法的參數(shù)**
```java
@ModelAttribute("user")
public User addAccount() {
return new User("jz","123");
}
@RequestMapping(value = "/helloWorld")
public String helloWorld(@ModelAttribute("user") User user) {
user.setUserName("jizhou");
return "helloWorld";
}
```
==在這個(gè)例子里,@ModelAttribute("user") User user注釋方法參數(shù),參數(shù)user的值來(lái)源于addAccount()方法中的model屬性。==
### 8.SessionAttribute注解
- 用于多次執(zhí)行控制器方法間的參數(shù)共享。
- 屬性:
1. value:用于指定存入的屬性名稱
2. type:用于指定存入的數(shù)據(jù)類型。
```java
@Controller
@RequestMapping(path="/user")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class SessionAttributeController {
/**
* 把數(shù)據(jù)存入 SessionAttribute
* @param model
* @return
* Model 是 spring 提供的一個(gè)接口,該接口有一個(gè)實(shí)現(xiàn)類 ExtendedModelMap
* 該類繼承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子類
*/
@RequestMapping("/testPut")
public String testPut(Model model){
model.addAttribute("username", "泰斯特");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
//跳轉(zhuǎn)之前將數(shù)據(jù)保存到 username、password 和 age 中,因?yàn)樽⒔釦SessionAttribute 中有這幾個(gè)參數(shù)
return "success";
}
/**
*從session中獲取值
*@return
*/
@RequestMapping("/testGet")
public String testGet(ModelMap model){
System.out.println(model.get("username")+";"
+model.get("password")+";"+model.get("age"));
return "success";
}
/**
* 從session中清除值
* @return
*/
@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
}
```
數(shù)據(jù)庫(kù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。