springmvc框架(四)——常用注解

1. RequestParam注解

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

  2. 属性

    1. value:请求参数中的名称

    2. required:请求参数中是否必须提供此参数,默认值是true,必须提供 (即 请求中没有该参数,则控制器不予执行对应方法)

  3. 代码如下:

<a href="param/testRequestParam&lt;%&ndash;?username=haha&ndash;%&gt;">测试RequestParam</a>
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(value="username",required = false)String name){
        System.out.println("执行了。。。");
        System.out.println(name);
        return "success";
    }

2. RequestBody注解

  1. 作用:用于获取请求体的内容(注意:get方法不可以)

  2. 属性

    1. required:是否必须有请求体,默认值是true

  3. 代码如下:

    <form action="param/testRequestBody" method="port">
        姓名:<input type="text" name="username"/><br/>//输入中文后台会乱码,即使设置了utf-8编码
        年龄:<input type="text" name="age"/><br/>
        <input type="submit" value="提交"/>
    </form>
    @RequestMapping(value="/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println("执行了。。。");
        System.out.println(body);
        return "success";
    }

3. PathVariable注解

  1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符

  2. 属性

    1. value:指定url中的占位符名称

  3. Restful风格的URL

    1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法

    2. restful风格的URL优点

      1. 结构清晰

      2. 符合标准

      3. 易于理解

       4. 扩展方便

  4.代码如下:

<a href="param/testPathVariable/22">测试PathVariable</a>
    @RequestMapping(value="/testPathVariable/{id}")
    public String testPathVariable(@PathVariable(value="id") String id){
        System.out.println("执行了。。。");
        System.out.println(id);
        return "success";
    }

4. RequestHeader注解

  1. 作用:获取指定请求头的值

  2. 属性

    1. value:请求头的名称

  3. 代码如下

<a href="param/testRequestHeader">测试RequestHeader</a>
    @RequestMapping(value="/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value="Accept") String header){
        System.out.println("执行了。。。");
        System.out.println(header);
        return "success";
    }

5. CookieValue注解

  1. 作用:用于获取指定cookie的名称的值

  2. 属性

    1. value:cookie的名称

  3. 代码如下:

<a href="param/useCookieValue">查询指定cookie的名称的值</a>
    @RequestMapping(value="/useCookieValue")
    public String useCookieValue(@CookieValue(value="JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }

6. ModelAttribute注解

  1. 作用

    1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。

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

  2. 应用场景

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

  3. 具体的代码

    <form action="param/updateUser" method="post">
        姓名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        <input type="submit" value="提交"/>
    </form>
方式一:    
    //修饰的方法有返回值
    @ModelAttribute
    public User showUser(String name) {//参数name一定要和表单里的name一致,才能获取,
  //若表单改成username,则这里也要改成username,同时表单的username此时就不能直接封装到user里,
  //因为username和User类中的name属性不一致,只有经过showUser方法里的user.setName()才能封装进去,age同理
System.out.println(
"showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName(name); user.setAge(20);//这里的年龄设置是无效的,因为表单提交时已经设置了年龄 user.setDate(new Date());//这里的日期设置就是对实体数据不完整时的补充,有效 return user; } @RequestMapping("/updateUser") public String updateUser(User user){//该user对象的数据,一部分来自表单的提交数据,如name和age,一部分来自showUser方法的补充,如date System.out.println("执行了。。。"); System.out.println(user); return "success"; } 方式二: //修饰的方法没有返回值 @ModelAttribute public void showUser(String name, Map<String, User> map) { System.out.println("showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName(name); user.setAge(20); user.setDate(new Date()); map.put("one",user); } @RequestMapping("/updateUser") public String updateUser(@ModelAttribute(value="one") User user) { System.out.println("执行了。。。"); System.out.println(user); return "success"; }

 

7.SessionAttributes注解

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

  2. 属性

    1. value:指定存入属性的名称

  3. 代码如下:

    <a href="param/testSessionAttributes">测试SessionAttribute</a>
    <a href="param/getSessionAttributes">获得SessionAttribute</a>
    <a href="param/delSessionAttributes">清空SessionAttribute</a>

跳转后的success.jsp页面:

<body>
    入门成功!!!<br/>
    request域中:${requestScope.username} <br/>${requestScope.age}<br/>
    session域中:${sessionScope}
</body>

控制器方法:

 
@Controller
@RequestMapping("/param")
@SessionAttributes(value = {"username"})
public class ParamController {

    @RequestMapping("/testSessionAttributes")
    public String testSessionAttribute(Model model){
        System.out.println("testSessionAttributes...");
        //底层会存储到requst域对象中
        model.addAttribute("username","小强");
        return "success";
    }

    @RequestMapping("/getSessionAttributes")
    public String getSessionAttribute(ModelMap modelMap){
        System.out.println("getSessionAttributes...");
        String username = (String)modelMap.get("username");
        System.out.println("姓名:"+username);
        return "success";
    }

    @RequestMapping("/delSessionAttributes")
    public String delSessionAttribute(SessionStatus status){
        System.out.println("delSessionAttributes...");
        //清空session
        status.setComplete();
        return "success";
    }

}

依次点击三个链接:

后台输出:

 


 

原文地址:https://www.cnblogs.com/churujianghudezai/p/12361186.html