@RequestParam
作用:把请求中指定名称的参数给控制器中的形参赋值。校正参数
属性:value:请求参数中的名称。
required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。如果改为false,可以不提供
测试:
@RequestMapping(value = "test_RequestParam")
public String test_RequestParam(@RequestParam("name")String username){
System.out.println("username = " + username);
return null;
}
复制
请求路径及参数
@RequestBody
作用1:用于获取请求体内容。直接使用得到是key=value&key=value...结构的数据。
作用2:用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上.(注意,此方法需要开启转换器,及引入Jackson坐标)
属性:required:是否必须有请求体。默认值是:true。当取值为true时,get请求方式会报错。如果取值为false,get请求得到是null。get请求方式不适用。
测试1:
<form action="test01/test_RequestBody.do" method="post">
姓名:<input type="text" name = "name"/><br>
年龄:<input type="text" name = "age"/><br>
<input type="submit" value="注册"/>
</form>
复制
@RequestMapping(value = "test_RequestBody")
public String test_RequestBody(@RequestBody String body){
System.out.println("body = " + body);
return "show";
}
复制
测试2:前端准备json格式的数据
<script>
$(function () {
$("button").click(function () {
$.ajax({
url:"test01/test_RequestBody2.do",
data:'{"name":"langlihuge","age":12}',
type : "post",
contentType:'application/json;charset=utf-8',
dataType:"json",
success :function (request) {
alert(request.name + " ," + request.age);
}
})
})
})
</script>
复制
@RequestMapping(value = "test_RequestBody2")
@ResponseBody
public Student test_RequestBody2(@RequestBody Student student){
System.out.println("student = " + student);
return student;
}
复制
注意:
@RequestHeader
作用:用于获取请求消息头。
属性:value:提供消息头名称 required:是否必须有此消息头
测试:
@RequestMapping(value = "test_RequestHeader")
public String test_RequestHeader(@RequestHeader(value = "Accept-Language") String requestHeader){
System.out.println("requestHeader = " + requestHeader);
return "show";
}
复制
@CookieValue
作用:用于把指定cookie名称的值传入控制器方法参数。
属性:value:指定cookie的名称。required:是否必须有此cookie。
测试
@RequestMapping(value = "test_CookieValue")
public String test_CookieValue(@CookieValue(value = "JSESSIONID") String cookie){
System.out.println("cookie = " + cookie);
return "show";
}
复制
@ModelAttribute
作用:该注解是SpringMVC4.3版本以后新加入的。它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。
属性:value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为null,此时就可以使用此注解解决问题。
基于POJO属性的基本使用:
<form action="test01/testModelAttribute.do" method="post">
姓名:<input type="text" name = "name"/><br>
年龄:<input type="text" name = "age"/><br>
<input type="submit" value="注册"/>
</form>
复制
@ModelAttribute
public void shoeModel(Student student){
System.out.println("执行了showModel方法 :"+student.getName());
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(Student student) {
System.out.println("执行了控制器的方法"+student.getName());
return "show";
}
复制
基于Map的例1:ModelAttribute修饰方法带返回值
<form action="test01/testModelAttribute.do" method="post">
姓名:<input type="text" name = "name"/><br>
<input type="submit" value="注册"/>
</form>
复制
@ModelAttribute
public Student shoeModel(String name){
Student stu = new Student();
stu.setName(name);
stu.setAge(23);
System.out.println("执行了showModel方法 :"+stu);
return stu;
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(Student student) {
System.out.println("执行了控制器的方法"+student);
return "show";
}
复制
基于Map的应用:ModelAttribute修饰方法不带返回值
@ModelAttribute
public void shoeModel(String name,Map<String,Student> map){
Student stu = new Student();
stu.setName(name);
stu.setAge(23);
System.out.println("执行了showModel方法 :"+stu);
map.put("abc",stu);
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") Student student) {
System.out.println("执行了控制器的方法"+student);
return "show";
}
复制
@SessionAttribute
作用:用于多次执行控制器方法间的参数共享。
属性:value:用于指定存入的属性名称 type:用于指定存入的数据类型。
测试
<a href="test01/testPut.do">存入SessionAttribute</a> <hr/>
<a href="test01/testGet.do">取出SessionAttribute</a> <hr/>
<a href="test01/testClean.do">清除SessionAttribute</a>
复制
@Controller()
@RequestMapping("/test01")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class MyController2 {
@RequestMapping("/testPut")
public String testPut(Model model){
model.addAttribute("username", "langlihuge");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
return "show";
}
@RequestMapping("/testGet") public String testGet(ModelMap model){
System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("age"));
return "show";
}
@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){ sessionStatus.setComplete();
return "show";
}
复制
注意:之前model数据默认存入request域中,现在存入session域中
喜欢转发
明天见
SpringMVC 10 处理器方法的返回值(ModelAndView和String))
SpringMVC 07 @RequestMapping说明