(1)RequestParam:
作用:把请求中指定名称的参数给控制器中的形参赋值
属性:value:请求参数的名称
required:请求参数中是否必须提供此参数。默认值:true,表示必须提供;如果不提供将报错
案例1
@Controller
@RequestMapping("/param")
public class ParamController {
@RequestMapping("/testParam")
public String testParam(String username){
System.out.println("zhixingle.....");
System.out.println(username);
return "success";
}
}
<a href="param/testParam?username=hhee">请求参数绑定</a>
注意颜色部分,username在testParam方法的形参中,不需要再进行显示的获取就可以自动获取数据
案例2
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name") String username){
System.out.println("执行了");
System.out.println(username);
return "success";
}
}
<body>
<h3></h3>
<a href="anno/testRequestParam?name=haha">RequestParam</a>
</body>
(2)Requestbody
作用:用于获取请求体的内容,直接使用得到的是key=value&key=value.....结构的数据,get请求方式不适用。
属性:required:是否必须有请求体。默认值是true。当取值为true时,get请求方式会报错。如果取值方式为false,get请求得到的是null。
只有post方式才有请求体
案例
<form action="anno/testRequestBody" method="post">
姓名:<input type="text" name="username">
年龄:<input type="text" name="age">
<input type="submit" value="提交">
</form>
/**
* 获取到请求体的内容
* @param username
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了");
System.out.println(body);
return "success";
}
(3)PathVaribale
作用:用于绑定url中的占位符,例如:请求URL中/delete/{id},这个{id}就是URL的占位符。
URL支持占位符spring3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。
属性:value:用于指定URL中的占位符名称
required:是否必须提供占位符
案例
<a href="anno/testPathVariable/11">PathVaribale</a>
/**
* PathVariable
* @param
* @return
*/
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id){
System.out.println("执行了");
System.out.println(id);
return "success";
}
(4)HiddentHttpMethodFilter过滤器
作用:由于浏览器form表单只支持GET和POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持GET\POST\PUT\DELETE请求
使用方法:
第一步:在web.xml中配置该过滤器;
第二步:请求方式必须使用post请求;
第三步:按照要求_method请求参数,该参数的取值就是我们需要的请求方式;method = RequestMethod.PUT,修改请求方式
@RequestMapping(value = "/testPathVariable/{sid}",method = RequestMethod.PUT)
public String testPathVariable(@PathVariable(name = "sid") String id){
System.out.println("执行了");
System.out.println(id);
return "success";
}
(5)RequestHeader注解
作用:用于获取请求消息头
属性:value:提供消息头名称
required:是否必须有此消息
注意:在实际开发中一般不怎么用
案例
<a href="anno/testRequestHeader">testRequestHeader</a>
/**
* 获取信息头
* @param
* @return
*/
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
System.out.println("执行了");
System.out.println(header);
return "success";
}
(6)CookieValue注解
作用:用于把指定cookie名称的值插入控制器方法参数
属性:value:指定cookie的名称
required:是否必须有此cookie
案例:
<a href="anno/testCookieValue">CookieValue</a>
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JESSIONID") String cookieValue){
System.out.println("执行了");
System.out.println(cookieValue);
return "success";
}
(7)ModelAttribute注解
作用:该注解是springmvc4.3版本以后加入的。它可以用于修饰方法和参数。
出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。
可以修饰没有返回值的方法,可以修饰有具体返回值的方法。
出现在参数上,获取指定的数据给参数赋值。
属性:value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key
应用场景:当表单统计数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。例如
我们在编辑一个用户时,用户有一个创建信息字段,该字段是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为null。此时就可以使用此注解解决问题。
<form action="anno/testModelAttribute" method="post">
姓名:<input type="text" name="username">
年龄:<input type="text" name="age">
<input type="submit" value="提交">
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(){
System.out.println("执行了");
return "success";
}
@ModelAttribute
public void showuser(){
System.out.println("showUser执行了");
}
结果:showUser先执行了,后面才是testModelAttribute执行
问题:
<form action="anno/testModelAttribute" method="post">
姓名:<input type="text" name="uname">
年龄:<input type="text" name="age">
<input type="submit" value="提交">
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("执行了");
System.out.println(user);
return "success";
}
//此方法先执行
@ModelAttribute
public void showuser(){
System.out.println("showUser执行了");
}
有返回值情况:
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("执行了");
System.out.println(user);
return "success";
}
//此方法先执行
@ModelAttribute
public User showuser(String uname){
System.out.println("showUser执行了");
//通过用户查询数据库(模拟)
User user = new User();
user.setAge(20);
user.setUname(uname);
user.setDate(new Date());
return user;
}
无返回值情况:
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "abc") User user){
System.out.println("执行了");
System.out.println(user);
return "success";
}
//此方法先执行,无返回值
@ModelAttribute
public void showUser(String uname, Map<String ,User> map){
System.out.println("showUser执行了");
//通过用户查询数据库(模拟)
User user = new User();
user.setAge(20);
user.setUname(uname);
user.setDate(new Date());
map.put("abc",user);
}
(8)SessionAttributes注解
作用:用于多次执行控制器方法间的参数共享,只能作用于类上
属性:value:用于指定存入的属性名称
type:用于指定存入的数据类型
案例
<a href="anno/testSessionAttribute">SessionAttribute</a><br> <a href="anno/getSessionAttribute">getSessionAttribute</a><br> <a href="/anno/delSessionAttribute">getSessionAttribute</a><br>
在类上设置:
@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"})//把msg=meimei存到Session域对象中
public class AnnoController {
@RequestMapping("/testSessionAttribute")
// public String testSessionAttribute(HttpServletRequest request){
// (HttpServletRequest request)参数,与Servlet耦合过高
public String testSessionAttribute(Model model){
System.out.println("testSessionAttribute执行了");
//model存入attribute属性后,底层会存储到request域对象中
model.addAttribute("msg","meimei");
return "success";
}
//获取Session值
@RequestMapping("/getSessionAttribute")
public String getSessionAttribute(ModelMap modelMap){
System.out.println("testSessionAttribute执行了");
String msg = (String) modelMap.get("msg");
System.out.println("session=" + msg);
return "success";
}
//删除Session值
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus status){
System.out.println("testSessionAttribute执行了");
status.setComplete();
return "success";
}
本文围绕Spring MVC展开,介绍了多个常用注解和过滤器。如RequestParam用于给控制器形参赋值,Requestbody获取请求体内容,PathVaribale绑定URL占位符等。还介绍了HiddentHttpMethodFilter过滤器,可改变浏览器请求方式,支持多种请求方法。
1405

被折叠的 条评论
为什么被折叠?



