zoukankan      html  css  js  c++  java
  • springMVC-常用注解

    1.requestParam

    作用:
    把请求中指定名称的参数给控制器中的形参赋值。
    属性:
    value: 请求参数中的名称。
    required:请求参数中是否必须提供此参数。 默认值: true。表示必须提供,如果不提供将报错。

    示例

    jsp代码
        <form action="anno/testRequestParam" method="post">
            姓名:<input type="text" name="username"/><br/>
            年龄:<input type="text" name="age"/><br/>
            <input type="submit" value="提交"/>
        </form>
    
    控制器代码
    @Controller
    @RequestMapping("/anno")
    public class AnnoController {
        @RequestMapping("/testRequestParam")
        public String testRequestParam(@RequestParam("username") String name,
                                       @RequestParam(value = "age",required = false) Integer age){
            System.out.println("run...");
            System.out.println("name:" + name);
            System.out.println("age:" + age);
            return "success";
        }
    }

    执行结果,传递参数中如果没有age,由于配置了false,也没有报错

    2.RequestBody注解

    作用:
    用于获取请求体内容。 直接使用得到是 key=value&key=value...结构的数据。
    get 请求方式不适用。get请求没有请求体的,请求全部封装到了地址栏
    属性:
    required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值
    为 falseget 请求得到是 null

    示例

    jsp    
    <form action="anno/testRequestBody" method="post"> 姓名:<input type="text" name="username"/><br/> 密码:<input type="text" name="password"/><br/> 年龄:<input type="text" name="age"/><br/> <input type="submit" value="测试requestBody注解"/> </form> 控制器 @RequestMapping("/testRequestBody") public String testRequestBody(@RequestBody(required = false) String body){ System.out.println("run..."); System.out.println(body); return "success"; }

    结果,控制台输出

    3.PathVaribale注解

    作用:
    用于绑定 url 中的占位符。 例如:请求 url 中 /delete/{id}, 这个{id}就是 url 占位符。
    url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
    属性:
    value: 用于指定 url 中占位符名称。
    required:是否必须提供占位符

    示例

    jsp代码
        <a href="anno/testPathVariable/100">测试pathVariable注解</a>
    
    控制器代码
        @RequestMapping("/testPathVariable/{sid}")
        public String testPathVariable(@PathVariable("sid") int id){
            System.out.println("run...");
            System.out.println(id);
            return "success";
        }

    结果

    4.RequestHeader注解

    作用:
    用于获取请求消息头。
    属性:
    value:提供消息头名称
    required:是否必须有此消息头
    注:
    在实际开发中一般不怎么用。

    示例

    jsp代码
     <a href="anno/testRequestHeader">测试RequestHeader注解</a>
    
    控制器代码
        @RequestMapping("/testRequestHeader")
        public String testRequestHeader(@RequestHeader(value = "Accept",required = false) String requestHead){
            System.out.println("run...");
            System.out.println(requestHead);
            return "success";
        }

    结果

    5.CookieValue注解

    作用:
    用于把指定 cookie 名称的值传入控制器方法参数。
    属性:
    value:指定 cookie 的名称。
    required:是否必须有此 cookie。
    用得也比较少

    浏览器向服务器发送请求,一定会在服务器中创建一个session空间,

    然后服务器会通过cookie的形式把session写回来,返回一个JSESSIONID

    现在我们就是获取这个JSESSIONID的值

    示例

    jsp代码
        <a href="anno/testCookieValue">测试CookieValue注解</a>
    
    控制器   
       @RequestMapping("/testCookieValue")
        public String testCookieValue(@CookieValue(value = "JSESSIONID")String cookieValue){
            System.out.println("run...");
            System.out.println(cookieValue);
            return "success";
        }

    打印结果

    6.ModelAttribute注解

    作用:
    该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。
    出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可
    以修饰有具体返回值的方法。
    出现在参数上,获取指定的数据给参数赋值。
    属性:
    value:用于获取数据的 key。 key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
    应用场景:
    当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
    例如:
    我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数
    据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题

    示例,被ModelAttribute注解标注的方法会先执行

    jsp代码
    <a href="anno/testModelAttribute1?name=test">测试被ModelAttribute注解标记的方法先执行</a><br/>
    
    控制器代码
        @RequestMapping("/testModelAttribute1")
        public String testModelAttribut1e(User user){
            System.out.println("run...");
            System.out.println("控制器的方法执行了,用户名是:" + user.getName());
            return "success";
        }
        @ModelAttribute
        public void showModel(User user){
            System.out.println("被ModelAttribute标记的方法执行了,用户名是:" + user.getName());
        }

    运行结果

     ModelAttribute注解的用法示例

    ModelAttribute注解标注的方法有返回值

    比如修改一个用户信息,要求用户的密码不能被修改

    pojo类
    public class User3 {
        private String name;
        private String password;
        private int age;
        private String addr;
        ...
    }
    
    jsp代码
        <form action="anno/updateUser3" method="post">
            姓名:<input type="text" name="name"/><br/>
            地址:<input type="text" name="addr"/><br/>
            年龄:<input type="text" name="age"/><br/>
            <input type="submit" value="修改用户信息"/>
        </form>
    
    控制器
        /**
         * 演示ModelAttribute的基本用法,在不修改密码的前提下修改用户信息
         */
        @RequestMapping("/updateUser3")
        public String testModelAttribute(User3 user){
            System.out.println("修改后的用户:" + user);
            return "success";
        }
        @ModelAttribute
        public User3 showUser3(String name){
            //模拟数据库查询用户
            User3 theUser = findUserByName(name);
            System.out.println("根据用户名查询的用户:" + theUser);
            return theUser;
        }
        //模拟数据库查询
        public User3 findUserByName(String name){
            User3 user = new User3();
            user.setPassword("123456");
            user.setName("rainbow");
            user.setAddr("步行街");
            user.setAge(18);
            return user;
        }

    结果

     ModelAttribute标注的方法没有返回值

    控制器代码
        @RequestMapping("/updateUser3")
        public String testModelAttribute(@ModelAttribute(value = "rainbow") User3 user){
            System.out.println("修改后的用户:" + user);
            return "success";
        }
    
            @ModelAttribute
        public void showUser3(String name, Map<String,User3>map){
            //模拟数据库查询用户
            User3 theUser = findUserByName(name);
            System.out.println("根据用户名查询的用户:" + theUser);
            map.put("rainbow", theUser);
        }

    结果

    7.SessionAttribute注解

    作用:
    用于多次执行控制器方法间的参数共享。
    属性:
    value:用于指定存入的属性名称
    type:用于指定存入的数据类型

    示例

    jsp
        <!-- SessionAttribute 注解的使用 -->
        <a href="sa/testPut">存入SessionAttribute</a><br/>
        <a href="sa/testGet">取出SessionAttribute</a><br/>
        <a href="sa/testClean">清除SessionAttribute</a>
    
    控制器
    @Controller
    @RequestMapping("/sa")
    @SessionAttributes(value ={"username","password"},types={Integer.class})
    public class SessionAttributeController {
        /**
         * 把数据存入 SessionAttribute
         * @param model
         * @return
         * Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap
         * 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类
         */
        @RequestMapping("/testPut")
        public String testPut(Model model){
            model.addAttribute("username", "泰斯特");
            model.addAttribute("password","123456");
            model.addAttribute("age", 31);
            System.out.println("put...");
            //跳转之前将数据保存到 username、 password 和 age 中,因为注解@SessionAttribute 中有这几个参数
            return "success";
        }
        @RequestMapping("/testGet")
        public String testGet(ModelMap model){
            System.out.println("get...");
            System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("age"));
            return "success";
        }
        @RequestMapping("/testClean")
        public String complete(SessionStatus sessionStatus){
            sessionStatus.setComplete();
            System.out.println("clean...");
            return "success";
        }
    }

    结果

    爱生活,爱码字

    我是匆匆、我曾喂自己半年酒。

    好好生活吧,有缘或许相见。

  • 相关阅读:
    oracle提交commit后回退恢复
    jQuery toggle() 方法 : 切换隐藏和显示
    sql server vs mysql
    Redis学习
    【转发】c#做端口转发程序支持正向连接和反向链接
    IKVM
    注册表
    解决VS2010自带的C/C++编译器CL找不到mspdb100.dll的问题
    【转载】Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration info
    Openwrt路由器上开发微信公众号应用
  • 原文地址:https://www.cnblogs.com/ccoonngg/p/11840690.html
Copyright © 2011-2022 走看看