springmvc常用注解

本文围绕Spring MVC展开,介绍了多个常用注解和过滤器。如RequestParam用于给控制器形参赋值,Requestbody获取请求体内容,PathVaribale绑定URL占位符等。还介绍了HiddentHttpMethodFilter过滤器,可改变浏览器请求方式,支持多种请求方法。

(1)RequestParam:

作用:把请求中指定名称的参数给控制器中的形参赋值

属性:value:请求参数的名称

          required:请求参数中是否必须提供此参数。默认值:true,表示必须提供;如果不提供将报错

案例1

@Controller
@RequestMapping("/param")
public class ParamController {

    @RequestMapping("/testParam")
    public String testParam(String username){
        System.out.println("zhixingle.....");
        System.out.println(username);
        return "success";
    }
}
<a href="param/testParam?username=hhee">请求参数绑定</a>

注意颜色部分,username在testParam方法的形参中,不需要再进行显示的获取就可以自动获取数据

案例2

@Controller
@RequestMapping("/anno")
public class AnnoController {

    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name = "name") String username){
        System.out.println("执行了");
        System.out.println(username);
        return "success";
    }
}
<body>
<h3></h3>
<a href="anno/testRequestParam?name=haha">RequestParam</a>
</body>

(2)Requestbody

作用:用于获取请求体的内容,直接使用得到的是key=value&key=value.....结构的数据,get请求方式不适用。

属性:required:是否必须有请求体。默认值是true。当取值为true时,get请求方式会报错。如果取值方式为false,get请求得到的是null。

只有post方式才有请求体

案例

<form action="anno/testRequestBody" method="post">
    姓名:<input type="text" name="username">
    年龄:<input type="text" name="age">
    <input type="submit" value="提交">
</form>
/**
 * 获取到请求体的内容
 * @param username
 * @return
 */
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
    System.out.println("执行了");
    System.out.println(body);
    return "success";
}

(3)PathVaribale

作用:用于绑定url中的占位符,例如:请求URL中/delete/{id},这个{id}就是URL的占位符。

URL支持占位符spring3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。

属性:value:用于指定URL中的占位符名称

required:是否必须提供占位符

案例

<a href="anno/testPathVariable/11">PathVaribale</a>
/**
 * PathVariable
 * @param
 * @return
 */
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id){
    System.out.println("执行了");
    System.out.println(id);
    return "success";
}

(4)HiddentHttpMethodFilter过滤器

作用:由于浏览器form表单只支持GET和POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持GET\POST\PUT\DELETE请求

使用方法:

第一步:在web.xml中配置该过滤器;

第二步:请求方式必须使用post请求;

第三步:按照要求_method请求参数,该参数的取值就是我们需要的请求方式;method = RequestMethod.PUT,修改请求方式

@RequestMapping(value = "/testPathVariable/{sid}",method = RequestMethod.PUT)
public String testPathVariable(@PathVariable(name = "sid") String id){
    System.out.println("执行了");
    System.out.println(id);
    return "success";
}

(5)RequestHeader注解

作用:用于获取请求消息头

属性:value:提供消息头名称

required:是否必须有此消息

注意:在实际开发中一般不怎么用

案例

<a href="anno/testRequestHeader">testRequestHeader</a>
/**
 * 获取信息头
 * @param
 * @return
 */
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
    System.out.println("执行了");
    System.out.println(header);
    return "success";
}

(6)CookieValue注解

作用:用于把指定cookie名称的值插入控制器方法参数

属性:value:指定cookie的名称

required:是否必须有此cookie

案例:

<a href="anno/testCookieValue">CookieValue</a>
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JESSIONID")  String cookieValue){
    System.out.println("执行了");
    System.out.println(cookieValue);
    return "success";
}

(7)ModelAttribute注解

作用:该注解是springmvc4.3版本以后加入的。它可以用于修饰方法和参数。

出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。

可以修饰没有返回值的方法,可以修饰有具体返回值的方法。

出现在参数上,获取指定的数据给参数赋值。

属性:value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key

应用场景:当表单统计数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。例如

我们在编辑一个用户时,用户有一个创建信息字段,该字段是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为null。此时就可以使用此注解解决问题。

<form action="anno/testModelAttribute" method="post">
    姓名:<input type="text" name="username">
    年龄:<input type="text" name="age">
    <input type="submit" value="提交">
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(){
    System.out.println("执行了");
    return "success";
}

@ModelAttribute
public void showuser(){
    System.out.println("showUser执行了");
}

结果:showUser先执行了,后面才是testModelAttribute执行

问题:

<form action="anno/testModelAttribute" method="post">
    姓名:<input type="text" name="uname">
    年龄:<input type="text" name="age">
    <input type="submit" value="提交">
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
    System.out.println("执行了");
    System.out.println(user);
    return "success";
}
//此方法先执行
@ModelAttribute
public void showuser(){
    System.out.println("showUser执行了");
}

有返回值情况:

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
    System.out.println("执行了");
    System.out.println(user);
    return "success";
}
//此方法先执行
@ModelAttribute
public User showuser(String uname){
    System.out.println("showUser执行了");
    //通过用户查询数据库(模拟)
    User user = new User();
    user.setAge(20);
    user.setUname(uname);
    user.setDate(new Date());

    return user;
}

无返回值情况:

@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "abc") User user){
    System.out.println("执行了");
    System.out.println(user);
    return "success";
}

//此方法先执行,无返回值
@ModelAttribute
public void showUser(String uname, Map<String ,User> map){
    System.out.println("showUser执行了");
    //通过用户查询数据库(模拟)
    User user = new User();
    user.setAge(20);
    user.setUname(uname);
    user.setDate(new Date());
    map.put("abc",user);
}

(8)SessionAttributes注解

作用:用于多次执行控制器方法间的参数共享,只能作用于类上

属性:value:用于指定存入的属性名称

type:用于指定存入的数据类型

案例

<a href="anno/testSessionAttribute">SessionAttribute</a><br>
<a href="anno/getSessionAttribute">getSessionAttribute</a><br>
<a href="/anno/delSessionAttribute">getSessionAttribute</a><br>

 

在类上设置:

@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"})//把msg=meimei存到Session域对象中
public class AnnoController {

 

    @RequestMapping("/testSessionAttribute")
//    public String testSessionAttribute(HttpServletRequest request){
//    (HttpServletRequest request)参数,与Servlet耦合过高
    public String testSessionAttribute(Model model){
        System.out.println("testSessionAttribute执行了");
        //model存入attribute属性后,底层会存储到request域对象中
        model.addAttribute("msg","meimei");

        return "success";
    }

    //获取Session值
    @RequestMapping("/getSessionAttribute")
    public String getSessionAttribute(ModelMap modelMap){
        System.out.println("testSessionAttribute执行了");
       String msg = (String) modelMap.get("msg");
        System.out.println("session=" + msg);
        return "success";
    }

    //删除Session值
    @RequestMapping("/delSessionAttribute")
    public String delSessionAttribute(SessionStatus status){
        System.out.println("testSessionAttribute执行了");
        status.setComplete();
        return "success";
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值