SpringMvc中的几个注解

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";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值