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

    springmvc常用注解

    1、RequestParam

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

    属性

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

    1.1、示例

    jsp代码

    <!-- requestParams 注解的使用 -->
    <a href="springmvc/useRequestParam?name=test">requestParam 注解</a>
    

    控制器代码

    /**
    * requestParams 注解的使用
    * @param username
    * @return
    */
    @RequestMapping("/useRequestParam")
    public String useRequestParam(@RequestParam("name")String username,
    @RequestParam(value="age",required=false)Integer age){
        System.out.println(username+","+age);
        return "success";
    }
    

    2、RequestBody

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

    属性

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

    2.1、示例

    post请求jsp代码

    <!-- requestbody 注解 -->
    <form action="springmvc/useRequestBody" method="post">
        用户名称:<input type="text" name="username" ><br/>
        用户密码:<input type="password" name="password" ><br/>
        用户年龄:<input type="text" name="age" ><br/>
        <input type="submit" value="保存">
    </form>
    

    get请求jsp代码

    <a href="springmvc/useRequestBody?body=test">requestBody注解get请求</a>
    

    控制器代码

    /**
    * RequestBody 注解
    * @param user
    * @return
    */
    @RequestMapping("/useRequestBody")
    public String useRequestBody(@RequestBody(required=false) String body){
    	System.out.println(body);
    	return "success"; 
    }
    

    3、PathVaribale

    作用:用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。

    属性

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

    3.1、示例

    jsp代码

    <!-- PathVariable 注解 -->
    <a href="springmvc/usePathVariable/100">pathVariable 注解</a>
    

    控制器代码

    /**
    * PathVariable 注解
    * @param user
    * @return
    */
    @RequestMapping("/usePathVariable/{id}")
    public String usePathVariable(@PathVariable("id") Integer id){
        System.out.println(id);
        return "success"; 
    }
    

    4、RequestHeader

    作用:用于获取请求消息头,在实际开发中一般不怎么用

    属性

    • value:提供消息头名称
    • required:是否必须有此消息头

    4.1、示例

    jsp代码

    <!-- RequestHeader 注解 --> 
    <a href="springmvc/useRequestHeader">获取请求消息头</a>
    

    控制器代码

    /**
    * RequestHeader 注解
    * @param user
    * @return
    */
    @RequestMapping("/useRequestHeader")
    public String useRequestHeader(@RequestHeader(value="Accept-Language",
    required=false)String requestHeader){
        System.out.println(requestHeader);
        return "success"; 
    }
    

    5、CookieValue

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

    属性

    • value:指定 cookie 的名称。
    • required:是否必须有此 cookie。

    5.1、示例

    jsp代码

    <!-- CookieValue 注解 --> 
    <a href="springmvc/useCookieValue">绑定 cookie 的值</a>
    

    控制器代码

    @RequestMapping("/useCookieValue")
    public String useCookieValue(@CookieValue(value="JSESSIONID",required=false) 
    String cookieValue){
        System.out.println(cookieValue);
        return "success"; 
    }
    

    6、ModelAttribute

    作用:该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。

    属性

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

    应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。例如:我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。

    6.1、基于实体类属性的基本使用

    jsp代码

    <!-- ModelAttribute 注解的基本使用 -->
    <a href="springmvc/testModelAttribute?username=test">测试 modelattribute</a>
    

    控制器代码

    /**
    * 被 ModelAttribute 修饰的方法
    * @param user
    */
    @ModelAttribute
    public void showModel(User user) {
    	System.out.println("执行了 showModel 方法"+user.getUsername());
    }
    
    /**
    * 接收请求的方法
    * @param user
    * @return
    */
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user) {
    	System.out.println("执行了控制器的方法"+user.getUsername());
    	return "success";
    }
    

    结果

    执行了showModel方法test
    执行了控制器的方法test
    

    6.2、基于map的应用场景

    • 修饰方法带返回值

    需求:修改用户信息,要求用户的密码不能修改

    6.2.1、示例

    jsp代码

    <!-- 修改用户信息 -->
    <form action="springmvc/updateUser" method="post">
        用户名称:<input type="text" name="username" ><br/>
        用户年龄:<input type="text" name="age" ><br/>
        <input type="submit" value="保存">
    </form>
    

    控制器代码

    /**
    * 查询数据库中用户信息
    * @param user
    */
    @ModelAttribute
    public User showModel(String username) {
        //模拟去数据库查询
        User abc = findUserByName(username);
        System.out.println("执行了 showModel 方法"+abc);
        return abc; 
    }
    
    /**
    * 模拟修改用户方法
    * @param user
    * @return
    */
    @RequestMapping("/updateUser")
    public String testModelAttribute(User user) {
        System.out.println("控制器中处理请求的方法:修改用户:"+user);
        return "success";
    }
    
    /**
    * 模拟去数据库查询
    * @param username
    * @return
    */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }
    
    • 修饰方法不带返回值

    需求:修改用户信息,要求用户的密码不能修改

    jsp代码

    <!-- 修改用户信息 -->
    <form action="springmvc/updateUser" method="post">
        用户名称:<input type="text" name="username" ><br/>
        用户年龄:<input type="text" name="age" ><br/>
        <input type="submit" value="保存">
    </form>
    

    控制器代码

    /**
    * 查询数据库中用户信息
    * @param user
    */
    @ModelAttribute
    public void showModel(String username,Map<String,User> map) {
        //模拟去数据库查询
        User user = findUserByName(username);
        System.out.println("执行了 showModel 方法"+user);
        map.put("abc",user);
    }
    /**
    * 模拟修改用户方法
    * @param user
    * @return
    */
    @RequestMapping("/updateUser")
    public String testModelAttribute(@ModelAttribute("abc")User user) {
        System.out.println("控制器中处理请求的方法:修改用户:"+user);
        return "success"; 
    }
    /**
    * 模拟去数据库查询
    * @param username
    * @return
    */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(19);
        user.setPassword("123456");
        return user;
    }
    

    7、SessionAttribute

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

    属性

    • value:用于指定存入的属性名称
    • type:用于指定存入的数据类型。

    7.1、示例

    jsp代码

    <!-- SessionAttribute 注解的使用 --> 
    <a href="springmvc/testPut">存入 SessionAttribute</a> <hr/>
    <a href="springmvc/testGet">取出 SessionAttribute</a> <hr/>
    <a href="springmvc/testClean">清除 SessionAttribute</a>
    

    控制器代码

    /**
    * SessionAttribute 注解的使用
    * @author 黑马程序员
    * @Company 
    * @Version 1.0
    */
    @Controller("sessionAttributeController")
    @RequestMapping("/springmvc")
    //把数据存到session中
    @SessionAttributes(value ={"username","password","age"},types={String.class,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); 
     	//跳转之前将数据保存到 username、password和age中,因为注解@SessionAttribute中有这几个参数 
     	return "success"; 
     } 
     
     @RequestMapping("/testGet") 
     public String testGet(ModelMap model){ 
    	System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("a
    	ge")); 
    	 return "success"; 
     } 
     
     @RequestMapping("/testClean") 
     public String complete(SessionStatus sessionStatus){ 
    	sessionStatus.setComplete(); 
     	return "success"; 
    	} 
    }
    
    记得快乐
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/Y-wee/p/13840336.html
Copyright © 2011-2022 走看看