SpringMVC(三)-常用注解

一、@RequestMapping

1、作用

用于建立请求URL和处理请求方法之间的对应关系。

2、位置

类上:请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。

方法上:请求URL的第二级访问目录。

3、参数

(1)path:指定请求路径的url
(2)value:value属性和path属性是一样的
(3)mthod: 指定该方法的请求方式
(4)params:指定限制请求参数的条件
(5)headers 发送的请求中必须包含的请求头

4、主要代码示例

页面代码

<html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">         
        <title>requestmapping的使用</title> 
    </head> 

    <body> 
        <!-- 注意:第二种写法,不要在访问URL前面加 / ,否则无法找到资源。 --> 

        <!-- 第一种访问方式 --> 
        <a href="${pageContext.request.contextPath}/account/findAccount"> 查询账户 </a> 
        
        <br/> 
        <!-- 第二种访问方式 --> 
        <a href="account/findAccount">查询账户</a> 
        
    </body> 
</html>

controller代码

    @Controller("accountController") 
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping("/findAccount")
        public String findAccount() { 
            System.out.println("查询账户。。。。"); 
            return "success";
        }    
    }

 

二、@RequestParam

1、作用

把请求中指定名称的参数,给控制器中的形参赋值。

2、位置

方法中的参数前。

3、参数

(1)value:请求参数中的名称
(2)required:请求参数中是否必须提供此参数,默认值是true。表示必须提供,如果不提供将报错。

4、主要代码示例

<!-- 页面代码 -->
<a href="test/testRequestParam?name=test">RequestParam注解测试</a>
 /**
 * 如果test方法中第一个参数由username变为name,与请求URL中的参数名一致,则@RequestParam可以省略。
 * 第二个参数age,注解中设置required=false,则URL中虽然没有这个参数,也不会报错。
 */

    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @RequestMapping("/testRequestParam")
        public String test(@RequestParam("name")String username, @RequestParam(value="age",required=false)Integer age) { 
            System.out.println(username+","+age);
            return "success";
        }    
    }

 

三、@RequestBody

1、作用

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

2、位置

方法中的参数前。

3、参数

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

4、主要代码示例

<!-- 表单,POST请求 --> 
<form action="test/testRequestBody" method="post"> 
    姓名:<input type="text" name="username" ><br/> 
    年龄:<input type="text" name="age" ><br/> 
    <input type="submit" value="保存"> 
</form> 

<!-- GET请求 -->
<a href="test/testRequestBody?body=test">requestBody注解get请求</a> 
    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @RequestMapping("/testRequestBody")
        public String test(@RequestBody(required=false) String body) { 
            System.out.println(body);
            return "success";
        }    
    }

//POST请求输出为:username=Jack&age=18
//GET请求输出为:null

 

四、@PathVaribale

1、作用

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

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

2、位置

方法中的参数前。

3、参数

(1)value:用于指定url中占位符名称。
(2)required:是否必须提供占位符。

4、主要代码示例

<!-- 页面代码 -->
<a href="test/findById/10">根据ID查询数据</a>
    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @RequestMapping("/findById/{id}")
        public String test(@PathVariable("id") Integer id) { 
            System.out.println(id);
            return "success";
        }    
    }

//执行后控制台会打印:10

 

五、@RequestHeader

1、作用

用于获取请求消息头信息。

2、位置

方法中的参数前。

3、参数

(1)value:消息头名称。
(2)required:是否必须有此消息头。

4、主要代码示例

<!-- 页面 --> 
<a href="test/testRequestHeader">获取请求消息头</a>
    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @RequestMapping("/testRequestHeader")
        public String test(@RequestHeader(value="Accept-Language", required=false)String requestHeader) { 
            System.out.println(requestHeader);
            return "success";
        }    
    }

//执行后控制台会打印:zh-CN,zh;q=0.9

 

六、@CookieValue

1、作用

用于把指定cookie名称的值,传入控制器方法参数。

2、位置

方法中的参数前。

3、参数

(1)value:指定cookie的名称。
(2)required:是否必须有此cookie。

4、主要代码示例

<!-- 页面 --> 
<a href="test/testCookieValue">绑定cookie的值</a>
    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @RequestMapping("/testCookieValue")
        public String test(@CookieValue(value="JSESSIONID",required=false) String cookieValue) { 
            System.out.println(cookieValue);
            return "success";
        }    
    }

 

七、@ModelAttribute

1、作用

在方法上,表示当前方法会在控制器的方法执行之前,先执行。可以修饰没有返回值的方法,可以修饰有具体返回值的方法。

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

2、位置

方法上,或方法中的参数前。

3、参数

(1)value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。
(2)required:是否必须有此cookie。

4、应用场景

当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。

5、主要代码示例

(1)ModelAttribute修饰方法带返回值

<form action="test/updateUser" method="post"> 
    名称:<input type="text" name="username" ><br/> 
    年龄:<input type="text" name="age" ><br/> 
    <input type="submit" value="保存"> 
</form>
    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @ModelAttribute 
        public User showModel(String username) { 
            //模拟去数据库查询 
            User oldUser = findUserByName(username); 
            System.out.println("执行了showModel方法" + oldUser); 
            return oldUser; 
        }

        @RequestMapping("/updateUser")
        public String test(User user) { 
            System.out.println("修改用户:" + user);
            return "success";
        }    

        private User findUserByName(String username) {
            ...省略查询代码
            return user;
        }

    }

 

(2)ModelAttribute修饰方法不带返回值,且@ModelAttribute用于参数

页面代码与上面相同,后台主要代码如下:

    @Controller("testController") 
    @RequestMapping("/test")
    public class testController {
    
        @ModelAttribute 
        public void showModel(String username, Map<String,User> map) { 
            //模拟去数据库查询 
            User oldUser = findUserByName(username); 
            System.out.println("执行了showModel方法" + oldUser); 
            map.put("aaa",user); 
        }

        @RequestMapping("/updateUser")
        public String test(@ModelAttribute("aaa")User user) { 
            System.out.println("修改用户:" + user);
            return "success";
        }    

        private User findUserByName(String username) {
            ...省略查询代码
            return user;
        }

    }

 

八、@SessionAttribute

1、作用

用于多次执行控制器方法间的参数共享。

2、位置

在类上标注。

3、参数

(1)value:用于指定存入的属性名称。
(2)type:用于指定存入的数据类型。

4、主要代码示例

<!-- 页面代码 --> 
<a href="test/testAdd">存入SessionAttribute</a> 
<hr/> 
<a href="test/testGet">取出SessionAttribute</a> 
<hr/> 
<a href="test/testDelete">清除SessionAttribute</a>
    @Controller("testController") 
    @RequestMapping("/test")
    // 把数据存入到session域对象中
    @SessionAttributes(value= {"username","password","age"},types= {String.class,Integer.class}) 
    public class testController {
    
    /** 
     * Model是spring提供的一个接口,该接口有一个实现类ExtendedModelMap, 
     * 该类继承了ModelMap,而ModelMap就是LinkedHashMap子类 
     */

        @RequestMapping("/testAdd")
        public String testAdd(Model model){
            //跳转之前将数据保存到username、password和age中,因为注解@SessionAttribute中有这几个参数
            model.addAttribute("username", "泰斯特");
            model.addAttribute("password","123456"); 
            model.addAttribute("age", 31);
            return "success";
        }

        @RequestMapping("/testGet") 
        public String testGet(ModelMap model){
            System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("age"));
            return "success";
        }    

        @RequestMapping("/testDelete") 
        public String testDelete(SessionStatus sessionStatus){
            sessionStatus.setComplete(); 
            return "success";
        }

    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值