1.@RequestParam
1)作用:把请求中指定名称的参数给控制器中的形参赋值
2)属性:value(name):请求参数中的名称
required:请求参数中是否必须提供此参数,默认值:true,表示必须提供该参数,若不提供,将会报错
@RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam(value="name") String username){ System.out.println(username); return "success"; }
访问该方法时,请求中的参数名称必须为"name",不传或者传其他参数名的参数将会报错
访问示例:localhost:8080/testRequestParam?name=Kavins(参数必须存在且参数名为name)
2.@RequestBody
1)作用:用于获取请求体内容,直接使用得到的是key=value&key=value...结构的数据,get请求方式不适用
2)属性:required:是否必须有请求体,默认值是true,当取值为true时,get请求方式会报错,如果值为false,get请求得到的是null
@RequestMapping("/testRequestBody") public String testRequestBody(@RequestBody String body){ System.out.println(body); return "success"; }
如图提交post请求
方法中的参数body获取的为post请求的整个请求体(姓名+年龄),而不是指其中的一个参数
后台打印结果为:username=Kavins&age=18
3.@PathVaribale
1)作用:用于绑定url中的占位符,例如:请求url中/delete/{id},{id}就是url占位符,url支持占位符是spring3.0之后加入的,是SpringMVC支持rest风格url的一个重要标志
2)属性:value:用于指定url中占位符名称
required:是否必须提供占位符,默认为true
@RequestMapping("/testPathVariable/{sid}") public String testPathVariable(@PathVariable(value="sid") String id){ System.out.println(id); return "success"; }
访问示例:http://localhost:8080/springmvc/anno/testPathVariable/100
后台将会打印100
4.@RequestHeader
1)作用:用于获取请求消息头
2)属性:value:提供消息头名称
required:是否必须有此消息头,默认值为true
@RequestMapping("/testRequestHeader") public String testRequestHeader(@RequestHeader(value="Accept") String header){ System.out.println(header); return "success"; }
打印结果:text/html, application/xhtml+xml, image/jxr, */*
5.@ModelAttribute
1)作用:该注解是SpringMVC4.3版本以后新加入的,他可以用来修饰方法和参数
修饰方法:表示当前方法会在控制器的方法之前先执行,他可以修饰没有返回值的方法,也可以修饰有具体返回值的方法.
参数:获取指定的数据给参数赋值
2)属性:value:用于获取数据的key,key可以使POJO类的属性名称,也可以是map结构的key
修饰有返回值方法
@RequestMapping("/testModelAttribute") public String testModelAttribute(User user){ System.out.println("testModelAttribute执行了"); System.out.println(user); return "success"; } /** * 该方法会先执行(有返回值),返回值会传给控制器方法的user参数 */ @ModelAttribute public User showUser(String username,Integer age){ System.out.println("showUser执行了..."); //通过用户查询数据库(模拟) User user = new User(); user.setUsername(username); user.setAge(age); user.setDate(new Date()); return user; }
点击提交后台打印:
showUser执行了...
testModelAttribute执行了
User{username='Kavins', age=18, date=Sat Feb 15 19:15:34 CST 2020}
//修饰没有返回值的方法: @RequestMapping("/testModelAttribute") public String testModelAttribute(@ModelAttribute("userMap") User user){ System.out.println("testModelAttribute执行了"); System.out.println(user); return "success"; } //该方法会先执行(没有返回值,将user封装在了key值为userMap的map中,在控制器方法的参数中使用@ModelAttribute("userMap")得到user对象) @ModelAttribute public void showUser(String username,Integer age,Map<String,User> map){ System.out.println("showUser执行了..."); //通过用户查询数据库(模拟) User user = new User(); user.setUsername(username); user.setAge(age); user.setDate(new Date()); map.put("userMap",user); }
打印结果:
showUser执行了...
testModelAttribute执行了
User{username='Kavins', age=18, date=Sat Feb 15 19:20:02 CST 2020}