1.@RequestMapping
params = {“username=hehe”}表示传入的参数中必须有username项,并且username必须为hehe,服务器才接收。
method = RequestMethod.POST表示必须为POST方式服务器才接收。
@RequestMapping(path = "testRequestMapping",params = {"username=hehe"},method = RequestMethod.POST)
2.@RequestParam
默认网页传的参数与函数中要求传入的参数名称相同才能映射,如果两者不同,可以在函数的形参前加上注解@RequestParam("网页传的参数名称")
,就可以将两者映射。
("网页传的参数名称"这个值必须要存在,如果不存在会bad request)
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("username") String name)
{
System.out.println(name);
return "success";
}
3.@RequestBody,@RequestHeader
@RequestBody是将请求体封装到一个对象中,常常是以字符串的形式
@RequestHeader(value = “Accept”)是将请求头封装到一个对象中,常常是以字符串的形式,且value中必须写一个键,否则无法响应。
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body,@RequestHeader(value = "Accept") String header)
{
//body内封装的就是请求体
//header内封装的就是"Accept"的请求头
System.out.println(body);
System.out.println(header);
return "success";
}
4.@ModelAttribute
该注解可以放在形参上或者方法上。
4.1只放在方法上,有返回值
当放在方法上时表示在该controller的方法执行之前执行,类似于AOP中@Before的作用。
@ModelAttribute
注解下的方法也可以像@RequestMapping
下的方法一样接收参数。它也可以有返回值,返回值会作为controller的方法的形参传入@RequestMapping
下的方法。如
@ModelAttribute
public User showUser(String username,String password)
{
System.out.println("showUser执行了");
User user=new User();
user.setDate(new Date());
user.setUsername(username);
user.setPassword(password);
return user;
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user)
{
System.out.println(user);
return "success";
}
以上代码网页只传入了username和password,但@ModelAttribute
下的方法增加了日期,这样即使网页没有传入日期,也可以对其进行相应的设置。
4.2放在方法和形参上,无返回值
有返回值的会造成局限,通过无放回值的写法,可以更灵活。
和有返回值有区别的是,无返回值时,@ModelAttribute
下的方法的形参要加上一个Map,并且最后要将修改好的对象存入Map中。这样,再执行其他函数时,只要在形参前加入@ModelAttribute(value = "此前设置的键")
,就能将前置函数中保存的对象注入后置函数的形参。
@ModelAttribute
public void showUser(String username, String password, Map<String,User> map)
{
System.out.println("showUser执行了");
User user=new User();
user.setDate(new Date());
user.setUsername(username);
user.setPassword(password);
map.put("user01", user);
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "user01") User user)
{
System.out.println(user);
return "success";
}
5.@SessionAttribute
作用是将值存放于session范围内,可以使多个类之间共享值。
可以通过获取servlet的api来设置session,但这样耦合度高,springmvc通过一个类ModelMap
来代替request的作用。
在controller下的方法的形参中加入ModelMap modelMap
,并向session域中添加值
modelMap.addAttribute("key","value");
除此之外,还要在该controller类上加上注解@SessionAttributes("key")
才能真正将该值添加到session域中。
比如:
@Controller
@RequestMapping("/anno")
@SessionAttributes("msg")
public class AnnoController
{
@RequestMapping("/testSessionAttribute")
public String testSeesionAttribute(ModelMap modelMap)
{
modelMap.addAttribute("msg","session is saved");
return "success";
}
}
然后也可以通过ModelMap的方法获取session域中的值:
@RequestMapping("/getSeesion")
public String getSeesion(ModelMap modelMap)
{
String msg=(String) modelMap.get("msg");
System.out.println(msg);
return "success";
}