Spring MVC常用注解

  • @RequestMapper

    • 作用:建立请求URL和处理方法之间的对应关系

    • 注解方式

      • 作用在类上:第一级的访问目录

      • 作用在方法上:第二级访问目录

      • 细节:路径可以不使用/

    • 属性

      • value/path:指定请求的url。value="user"

      • method:指定请求的方法,如POST、GET,PUT等 。method={RequestMethod.GET}

      • params:指定请求的参数名称或者值。params={"username"}或者是params={"username=hu"},请求的地址就必须是在最后面添加?username或者是?username=hu

      • headers:指定请求的头部信息。headers={"Accept"}

  • @RequestParam

    • 作用:解决方法参数名称和前端传来的名称不一样

    • 注解方式:作用在方法参数之前

    • 属性

      • name:指定前端传来的参数名称。@RequestParam(name="name") String username

<a href="/user?name=胡先森">胡先森</a>
@RequestMapping(name="user")
public String myMethod(@RequestParam(name="name") String username){
    System.out.println(username);    //huxiansen
    return "user";
}
  • @RequestBody

    • 作用:解决post请求封装的请求体,适用于post请求

    • 注解方式:作用在方法参数之前

<form action="/user" method="post">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" value="提交" />
</form>
@RequestMapping(name="user")
public String myMethod(@RequestBody String body){
    System.out.println(body);    //username=aaa&password=111
    return "user";
}
  • @PathVariable

    • 作用:解决有占位符的地址

    • 注解方式:作用在方法参数之前

<a href="/user/10">胡先森</a>
@RequestMapping("user/{user_id}")
public String myMethod(@PathVariable(name="user_id") String uid){
    System.out.println(uid);   //10
    return "user";
}
  • @RequestHeader

    • 作用:获取请求的消息头中某个值

    • 注解方式:作用在方法参数之前

@RequestMapping("user/{user_id}")
public String myMethod(@PathVariable(name="user_id") String uid, @RequestHeader(name="Accept") String accept){
    System.out.println(uid);   //10
    System.out.println(accept);   //。。。
    return "user";
}
  • @CookieValue

    • 作用:获取Cookie的里面相关信息值

    • 注解方式:作用在方法参数之前

@RequestMapping("user/{user_id}")
public String myMethod(@PathVariable(name="user_id") String uid, @RequestHeader(name="Accept") String accept, @CookieValue(name="JSESSIONID") String sessionID){
    System.out.println(uid);   //10
    System.out.println(accept);  //。。。
    System.out.println(sessionID);   //。。。
    return "user";
}
  • @ModelAttribute

    • 作用:用于修饰方法和参数

    • 注解方式

      • 作用在方法上:表示当前方法会在控制器的方法执行之前先执行,它可以修饰没有返回值的方法,也可以修饰有返回值的方法

      • 作用在参数之前:获取指定的数据给参数赋值

    • 应用场景:当表达提交的数据不完全是实体类类型的数据时,保证没有提交数据的字段使用数据库原来的对象(后一句可以是业务需求);实体类型的数据都会全部封装,无论之前的方法怎么修改,都是表单封装的数据。

      • 作用在有返回值的方法

        <form action="/user" method="post">
            <input type="text" name="username" />
            <input type="password" name="password" />
            <input type="submit" value="提交" />
        </form>
        @RequestMapping("user")
        public String testModelAttribute(User user){
            System.out.println(user);   // user={username=huxiansen,password=111,age=1}
            return "user";
        }
        ​
        @ModelAttribute
        public User findByUsername(String username, String password){
            // username需要对应前端的传来的名称
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            user.setAge(1);
            return user;
        }
      • 作用在没有返回值的方法,借助map集合

        @RequestMapping("user")
        public String testModelAttribute(@ModelAttribute("user") User user){
            System.out.println(user);   //user={username=huxiansen,password=111,age=1}
            return "user";
        }
        ​
        @ModelAttribute
        public void findByUsername(String username, String password, HashMap<String, User> map){
            // username需要对应前端的传来的名称
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            user.setAge(1);
            map.put("user", user);
        }
  • @SessionAttributes

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

    • 属性

      • value:用于指定存入的参数名称

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

    <a href="/user/setSessionAttributes">设置SessionAttributes</a>
    <a href="/user/getSessionAttributes">获取SessionAttributes</a>
    <a href="/user/delSessionAttributes">删除SessionAttributes</a>
    • 点击第一个链接,会将设置的值添加到request域中,后在jsp页面使用EL表达式输出即可显现

    import org.springframework.ui.Model;
    ​
    @RequestMapping(value="user/setSessionAttributes")
    public String setSessionAttributes(Model model){
        model.addAttribute("message", "添加信息到requestScope中");
        return "success";
    }
    <h5>
        ${requestScope}   <!-- 打印request域中所有的信息 -->
    </h5>
    • 由于SessionAttributes的作用是参数共享,需要在类上添加此注解,并指定参数名称;控制台打印message值,也可以在jsp页面展现

    @Controller
    @RequestMapping(value="user")
    @SessionAttributes("message")   //将指定的值存放到session域中
    public class UserController{
        @RequestMapping(value="setSessionAttributes")
        public String setSessionAttributes(Model model){
            model.addAttribute("message", "添加信息到requestScope中");
            return "success";
        }
        
        @RequestMapping(value="getSessionAttributes")
        public String setSessionAttributes(ModelMap modelMap){
            String message = (String) modelMap.get("message");
            System.out.println(message);     // 添加信息到requestScope中
            return "success";
        }
    }
    <h5>
        ${requestScope}   <!-- 打印request域中所有的信息 -->
    </h5>
    <h5>
        ${sessionScope}   <!-- 打印session域中的信息 -->
    </h5>
    • 删除session域的值使用SessionStatus类中的setComplete方法

    import org.springframework.web.bind.support.SessionStatus;
    ​
    @Controller
    @RequestMapping(value="user")
    @SessionAttributes("message")   //将指定的值存放到session域中
    public class UserController{
        @RequestMapping(value="setSessionAttributes")
        public String setSessionAttributes(Model model){
            model.addAttribute("message", "添加信息到requestScope中");
            return "success";
        }
        
        @RequestMapping(value="getSessionAttributes")
        public String setSessionAttributes(ModelMap modelMap){
            String message = (String) modelMap.get("message");
            System.out.println(message);     // 添加信息到requestScope中
            return "success";
        }
        
        @RequestMapping(value="delSessionAttributes")
        public String delSessionAttributes(SessionStatus sessionStatus){
            //将session域中的信息删除
            sessionStatus.setComplete();
            return "success";
        }
    }
原文地址:https://www.cnblogs.com/aitiknowledge/p/12796477.html