1. @RequestParam注解
- 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性:
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数,默认值是true,必须提供
- 代码如下:
/**
* 接收请求
* @return
*/
@RequestMapping(path="/hello")
public String sayHello(@RequestParam(value="username",required=false)String name) {
System.out.println("aaaa");
System.out.println(name);
return "success";
}
<%--常用的注解--%>
<a href="anno/testRequestParam?name=哈哈">RequestParam</a>
2. @RequestBody注解
- 作用:用于获取请求体的内容,用于获取请求体内容。直接使用得到是 key=value&key=value…(请求体结构)结构的数据。get 请求方式不适用(get请求没有请求体,请求参数都封装在地址栏上面)。
- 属性
1. required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false,get 请求得到是 null。 - 代码如下 :
post请求jsp代码:
<form action="anno/testRequestBody"method="post">
用户姓名:<input type="text" name="username"/><br/>
用户年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/><br/>
</form>
get 请求 jsp 代码:
<a href="springmvc/useRequestBody?body=test">requestBody 注解 get 请求</a>
控制器代码:
/**
* RequestBody 注解
* @param user
* @return
*/
@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required=false) String body){
System.out.println(body);
return "success";
}
post 请求运行结果:
3. @PathVariable注解
- 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性
- value:指定url中的占位符名称
- Restful风格的URL
- 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
- restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
jsp代码:
<a href="anno/testPathVariable/10">PathVariable注解</a>
控制器代码:
/**
* PathVariable注解
* @param id
* @return
*/
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name="sid") String id){
System.out.println("执行了...");
System.out.println(id);
return "success";
}
执行结果:
4. @RequestHeader注解
- 作用:获取指定请求头的值
- 属性:
1. value:请求头的名称 - 控制器代码如下:
/**
* 获取请求头的值
* @param header
* @return
*/
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
System.out.println("执行了...");
System.out.println(header);
return "success";
}
jsp代码:
<a href="anno/testRequestHeader">RequestHeader注解</a>
执行结果:
5. @CookieValue注解
- 作用:用于获取指定cookie的名称的值
- 属性
- value:cookie的名称
- 控制器代码:
/**
* Cookie 注解注解
* @param cookieValue
* @return
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
System.out.println("执行了...");
System.out.println(cookieValue);
return "success";
}
- jsp代码:
<a href="anno/testCookieValue">CookieValuer注解</a>
执行结果:
6. @ModelAttribute注解
- 作用
- 出现在方法上:表示当前方法会在控制器方法执行前线执行。
- 出现在参数上:获取指定的数据给参数赋值。
- 应用场景
- 当提交表单数据不是完整的实体数据时,保证没有提交的字段 使用数据库原来的数据。
- 具体的代码:
- 修饰的方法有返回值
控制器代码:
/**
* ModelAttribute注解
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("testModelAttribute执行了...");
System.out.println(user);
return "success";
}
/**
* 该方法会先执行
*/
@ModelAttribute
public User showUser(String username){
System.out.println("showUser执行了...");
//通过用户名查数据库(模拟)
User user=new User();
user.setUsername(username);
user.setAge(20);
user.setDate(new Date());
return user;
}
jsp代码:
<form action="anno/testModelAttribute"method="post">
用户姓名:<input type="text" name="username"/><br/>
用户年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/><br/>
</form>
执行结果:
2. 修饰的方法没有返回值
控制器代码:
/**
* ModelAttribute注解
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
System.out.println("testModelAttribute执行了...");
System.out.println(user);
return "success";
}
@ModelAttribute
public void showUser(String username, Map<String,User> map){
System.out.println("showUser执行了...");
//通过用户名查数据库(模拟)
User user=new User();
user.setUsername(username);
user.setAge(20);
user.setDate(new Date());
map.put("abc",user);
}
执行结果:
7. @SessionAttributes注解
- 作用:用于多次执行控制器方法间的参数共享
- 属性
- value:指定存入属性的名称
- 代码如下:
控制器代码:
/**
* SessionAttributes注解
* @return
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("testSessionAttributes...");
//底层会存储到request域对象中
model.addAttribute("msg","美美");
return "success";
}
/**
* 获取值
* @param modelMap
* @return
* Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap
* 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类
*/
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap){
System.out.println("testSessionAttributes...");
String msg= (String) modelMap.get("msg");
System.out.println(msg);
return "success";
}
/**
* 清除
* @param status
* @return
*/
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
System.out.println("testSessionAttributes...");
status.setComplete();
return "success";
}
jsp部分代码:
<a href="anno/testSessionAttributes">SessionAttributes</a>
<a href="anno/getSessionAttributes">SessionAttributes</a>
<a href="anno/delSessionAttributes">SessionAttributes</a>
success代码:
<h3>进入成功!</h3>
${msg}
${sessionScope}
执行结果: