• 2、SpringMVC常用注解


    @RequestMapping

    /**
     * 控制器类
     */
    @Controller
    @RequestMapping("/user")//作用在类上:相当于一级访问目录
    public class UserController {
        /**
         * value: 和path属性作用一样,指定通过什么样的请求才能方法该方法
         * method: 方法的请求方式必须是get请求
         * params: 指定访问该方法的请求必须携带username属性,属性值必须为xiaoming的参数才可访问
         * headers:指定请求同必须为Accept的才可以访问
         * @return
         */
        //RequestMapping作用于方法上相当于二级访问目录
        @RequestMapping(path={"/hello"}, method ={RequestMethod.GET}, params = {"username=xiaoming"}, headers = {"Accept"})
        public String hello(){
            return "success";
        }
    }
    
    

    以下的请求符合映射条件
    @Params并没有指定age参数是必须的,所以符合映射条件

    <a href="user/hello?username=xiaoming&age=18">点击</a>
    

    path和value的作用一样

    @AliasFor("path")
    String[] value() default {};
    
    @AliasFor("value")
    String[] path() default {};  
    

    method属性请求方式

    public enum RequestMethod {
        GET,
        HEAD,
        POST,
        PUT,
        PATCH,
        DELETE,
        OPTIONS,
        TRACE;
    
        private RequestMethod() {
        }
    }
    

    @RequestParam

    解决参数名不一致而导致不能封装问题

    请求

    <a href="user/requestParam?username=哈罗">提交</a>
    

    Controller

    @RequestMapping("/requestParam")
    public String useRequestParam(@RequestParam("username")String name){
        System.out.println(name);
        return "success";
    }
    

    @RequestBody

    用于获取请求体内容,get请求不适用
    用于参数列表中的参数,form表单提交后,将所有携带的参数赋值给该参数,参数类型为String

    form表单

    <form action="user/requestBody" method="post">
    姓名:<input type="text" name="username"><br>
    年龄:<input type="text" name="age"><br>
    日期:<input type="text" name="birthday">
    
    <input type="submit" value="提交">
    </form>
    

    Controller方法

    @RequestMapping("/requestBody")
    public String useRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }
    

    @PathVariable

    用于绑定url中的占位符{}, 如/delete/{id}
    占位符和@PathVariable中的name属性值必须保持一致

    请求

     <a href="user/pathVariable/{'哈罗'}">提交</a>
    

    方法

    @RequestMapping("/pathVariable/{username}")
    public String usePathVariable(@PathVariable("username") String name){
        System.out.println(name);
        return "success";
    }
    

    @RequestHeader

    用于获取请求消息头
    作用在controller方法的参数列表中的参数上
    请求

    <a href="user/requestHeader">提交</a>
    

    方法

    @RequestMapping("/requestHeader")
    public String useRequestHeader(@RequestHeader("Accept") String header){
        System.out.println(header);
        return "success";
    }
    

    @CookieValue

    获得cookie名称的值

    请求

    <a href="user/cookieValue">提交</a>
    

    方法

    @RequestMapping("/cookieValue")
    public String useCookieValue(@CookieValue ("JSESSIONID") String cookie){
        System.out.println(cookie);
        return "success";
    }
    

    @ModelAttribute

    标注于方法上,会在Controller的方法执行前执行
    请求

    <a href="user/selectUser">提交</a>
    

    方法

    @RequestMapping("/selectUser")
    public String selectUser(){
        System.out.println("查询方法执行");
        return "success";
    }
    
    @ModelAttribute
    public void useModelAttribute(){
        System.out.println("ModelAttribute先执行。。。");
    
    }
    

    标注着@ModelAttribute的方法会优先执行,然后再执行请求的目标方法

    标注@ModelAttribute的方法因为优先执行,可以在映射到请求方法之前进行一些预处理的操作
    常用于update环境下,当被单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象那个原来的数据

    第一种,有返回值的写法
    请求

    <form action="user/selectUser" method="post">
        姓名:<input type="text" name="username"><br>
        年龄:<input type="text" name="age"><br>
        <input type="submit" value="提交">
    </form>
    

    方法

    @RequestMapping("/selectUser")
    public String selectUser(User user){
        System.out.println(user);
        return "success";
    }
    
    /**
     * 传入一个name是模拟通过name值查询出该对象
     * @param name
     * @return
     */
    @ModelAttribute
    public User useModelAttribute(String name){
        //这里创建user对象是模拟从数据库中查找出来的数据
        User user = new User();
        user.setUsername(name);
        user.setAge(30);
        user.setBirthday(new Date());
    
        return user;
    }
    

    第二种,无返回值的写法
    @ModelAttribute作用于参数时,代表从容器中获取对象
    将查询到的对象存放于Map集合中,通过@ModelAttribute(key)获取存在Map中的对象

    /**
     * 通过@ModelAttribute获取存在Map中的数据
     * @param name
     * @return
     */
    @RequestMapping("/selectUser")
    public String selectUser(@ModelAttribute("user") User user){
        System.out.println(user);
        return "success";
    }
    
    /**
     * 传入一个name是模拟通过name值查询出该对象
     * @param name
     * @return
     */
    @ModelAttribute
    public void useModelAttribute(String name, Map<String, User> userMap){
        //这里创建user对象是模拟从数据库中查找出来的数据
        User user = new User();
        user.setUsername(name);
        user.setAge(30);
        user.setBirthday(new Date());
    
        userMap.put("user", user);
    }
    

    @SessionAttribute注解

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

    1、利用Model将对象存于request域

    请求

    <a href="user/request">提交</a>
    

    方法

    @RequestMapping("/request")
    public String userRequest(Model model){
        model.addAttribute("user", "小白");
        return "success";
    }
    

    返回页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Success</title>
    </head>
    <body>
        ${user}
    </body>
    </html>
    

    @SessionAttribute只能作用于类上

    @Controller
    @RequestMapping("/user")//作用在类上:相当于一级访问目录
    @SessionAttributes(value = {"user"})//将user属性存放于session域中
    public class UserController {
          @RequestMapping("/request")
          public String userRequest(Model model){
              model.addAttribute("user", "小白");
              return "success";
          }
    }
    

    通过${sessionScope.user}获取session域中的值

    存入session域主要的作用是方法间可以共享数据
    请求

    <a href="user/request">提交</a>
    <a href="user/session">提交</a>
    <a href="user/removeSession">提交</a>
    

    方法

    /**
     * 控制器类
     */
    @Controller
    @RequestMapping("/user")
    @SessionAttributes(value = {"user"}) //将user属性的对象存放于session域中
    public class UserController {
        /**
         * 将数据存放于request域
         * @param model
         * @return
         */
        @RequestMapping("/request")
        public String userRequest(Model model){
            //model可以将该对象存放到request域中
            model.addAttribute("user", "小白");
            return "success";
        }
        //获取request域中的数据
        @RequestMapping("/session")
        public String userSession(ModelMap modelMap){
            //可以通过Model获取session域中存放的对象
            modelMap.getAttribute("user");
            return "success";
        }
    
        /**
         * 清除session域中的对象
         * @param status
         * @return
         */
        @RequestMapping("/removeSession")
        public String userRemoveSession(SessionStatus status){
            status.setComplete();
            return "success";
        }
    }
    
  • 相关阅读:
    DateTimeHelper
    Check F5 refresh submit post back repeatly
    GZip Compress SoapExtension
    WebBrowser 高级扩展 js扩展 js订阅C#事件
    DataSet GZip/Deflate Serializer
    Socket/Stream Data Helper
    历年评书出版一览表(1955~1994)
    c#检测字节流编码
    Execute SQL Server Store Procedure C# ADO.Net Wrapper Code Generator
    Directory File Disk Searcher
  • 原文地址:https://www.cnblogs.com/Ryuichi/p/13376211.html
Copyright © 2020-2023  润新知