@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")@ResponseBodypublic 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>
@ModelAttributepublic 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>
@ModelAttributepublic 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修饰方法不带返回值
@ModelAttributepublic 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说明




