SpringBoot(接受参数相关注解)
作者:mmseoamin日期:2024-03-20

文章目录

    • 1.基本介绍
    • 2.@PathVariable 路径参数获取信息
        • 1.代码实例
          • 1.index.html
          • 2.ParameterController.java
          • 3.测试
          • 2.细节说明
          • 3.@RequestHeader 请求头获取信息
              • 1.代码实例
                • 1.index.html
                • 2.ParameterController.java
                • 3.测试
                • 2.细节说明
                • 4.@RequestParameter 请求获取参数信息
                    • 1.代码实例
                      • 1.index.html
                      • 2.ParameterController.java
                      • 3.测试
                      • 2.细节说明
                      • 5.@CookieValue cookie获取值
                          • 1.代码实例
                            • 1.index.html
                            • 2.ParameterController.java
                            • 3.测试
                            • 2.细节说明
                            • 6.@RequestBody 处理json请求,post请求体获取信息
                                • 1.代码实例
                                  • 1.index.html
                                  • 2.ParameterController.java
                                  • 3.测试
                                  • 7.@RequestAttribute 请求域获取信息
                                      • 1.代码实例
                                        • 1.RequestController.java
                                        • 2.配置视图解析器 application.yml
                                        • 3.测试
                                        • 8.@SessionAttribute session域获取信息
                                            • 1.代码实例
                                              • 1.SessionController.java
                                              • 2.配置视图解析器(同上)
                                              • 3.测试
                                              • 9.复杂参数
                                                  • 1.代码实例
                                                    • 1.RequestController.java
                                                    • 2.测试
                                                    • 2.HttpServletResponse给浏览器设置cookie
                                                      • 1.代码实例
                                                      • 2.测试

                                                        1.基本介绍

                                                        SpringBoot(接受参数相关注解),image-20240314115739021,第1张

                                                        2.@PathVariable 路径参数获取信息

                                                        1.代码实例
                                                        1.index.html
                                                        
                                                        
                                                        
                                                            
                                                            Title
                                                        
                                                        
                                                        

                                                        基本注解


                                                        @PathVariable-路径变量:https://blog.csdn.net/monster/100/king
                                                        2.ParameterController.java
                                                        package com.sun.springboot.controller;
                                                        import org.springframework.web.bind.annotation.GetMapping;
                                                        import org.springframework.web.bind.annotation.PathVariable;
                                                        import org.springframework.web.bind.annotation.RestController;
                                                        import java.util.Map;
                                                        /**
                                                         * @author 孙显圣
                                                         * @version 1.0
                                                         */
                                                        @RestController
                                                        public class ParameterController {
                                                            @GetMapping("/monster/{id}/{name}") //接受两个路径参数
                                                            public String pathVariable(@PathVariable("id") Integer id, @PathVariable("name") String name,
                                                                                       @PathVariable Map map) { //这里的map指将所有的路径参数都放到map中
                                                                System.out.println("id:" + id + " name:" + name);
                                                                for (Map.Entry entry : map.entrySet()) {
                                                                    System.out.println("key:" + entry.getKey() + " value: " + entry.getValue());
                                                                }
                                                                return "success"; //返回json给浏览器
                                                            }
                                                        }
                                                        
                                                        3.测试

                                                        SpringBoot(接受参数相关注解),image-20240314132013427,第2张

                                                        SpringBoot(接受参数相关注解),image-20240314132028528,第3张

                                                        2.细节说明
                                                        • @PathVariable(“xxx”)必须跟{xxx}相对应
                                                        • 可以将所有的路径参数放到map中 @PathVariable Map map

                                                          3.@RequestHeader 请求头获取信息

                                                          1.代码实例
                                                          1.index.html
                                                          
                                                          
                                                          
                                                              
                                                              Title
                                                          
                                                          
                                                          

                                                          基本注解


                                                          @RequestHeader-获取请求头信息
                                                          2.ParameterController.java
                                                          package com.sun.springboot.controller;
                                                          import org.springframework.web.bind.annotation.GetMapping;
                                                          import org.springframework.web.bind.annotation.RequestHeader;
                                                          import org.springframework.web.bind.annotation.RestController;
                                                          import java.util.Map;
                                                          /**
                                                           * @author 孙显圣
                                                           * @version 1.0
                                                           */
                                                          @RestController
                                                          public class ParameterController {
                                                              @GetMapping("https://blog.csdn.net/requestHeader") //获取请求头的信息
                                                              public String requestHeader(@RequestHeader("host") String host, @RequestHeader Map header) {
                                                                  System.out.println("host:" + host);
                                                                  System.out.println(header);
                                                                  return "success";
                                                              }
                                                          }
                                                          
                                                          3.测试

                                                          SpringBoot(接受参数相关注解),image-20240314134629880,第4张

                                                          SpringBoot(接受参数相关注解),image-20240314134644676,第5张

                                                          2.细节说明
                                                          • 请求头的信息都是以key - value的形式存储的
                                                          • 可以通过@RequestHeader(“xxx”)来获取xxx对应的value
                                                          • 也可以通过@RequestHeader Map header将所有的key - value都封装到map中

                                                            4.@RequestParameter 请求获取参数信息

                                                            1.代码实例
                                                            1.index.html
                                                            
                                                            
                                                            
                                                                
                                                                Title
                                                            
                                                            
                                                            

                                                            基本注解


                                                            @RequestParam-请求参数
                                                            2.ParameterController.java
                                                            package com.sun.springboot.controller;
                                                            import org.springframework.web.bind.annotation.*;
                                                            import java.util.List;
                                                            /**
                                                             * @author 孙显圣
                                                             * @version 1.0
                                                             */
                                                            @RestController
                                                            public class ParameterController {
                                                                @GetMapping("/hi")
                                                                public String hi(@RequestParam(value = "name", defaultValue = "孙显圣") String name,
                                                                                 @RequestParam("hobby") List list) {
                                                                    System.out.println("name:" + name);
                                                                    System.out.println(list);
                                                                    return "success";
                                                                }
                                                            }
                                                            
                                                            3.测试

                                                            SpringBoot(接受参数相关注解),image-20240314135930766,第6张

                                                            SpringBoot(接受参数相关注解),image-20240314135936925,第7张

                                                            2.细节说明
                                                            • 请求参数是可以设置默认值的,使用defaultValue属性即可
                                                            • 请求参数还可以将同名的结果封装到List中
                                                            • 请求参数也可以使用@RequestParameter Map map 将所有参数封装到map中,但是如果有同名的结果只会得到第一个,因为map的key是唯一的

                                                              5.@CookieValue cookie获取值

                                                              1.代码实例
                                                              1.index.html
                                                              
                                                              
                                                              
                                                                  
                                                                  Title
                                                              
                                                              
                                                              

                                                              基本注解


                                                              @CookieValue-获取cookie的值
                                                              2.ParameterController.java
                                                              package com.sun.springboot.controller;
                                                              import org.springframework.web.bind.annotation.*;
                                                              import javax.servlet.http.Cookie;
                                                              import javax.servlet.http.HttpServletRequest;
                                                              /**
                                                               * @author 孙显圣
                                                               * @version 1.0
                                                               */
                                                              @RestController
                                                              public class ParameterController {
                                                                  @GetMapping("https://blog.csdn.net/cookie")
                                                                  //这里可以设置required = false意为不是必须存在的,如果不存在则得到的值就为null
                                                                  //如果后面的参数类型是Cookie,则会获取Cookie对象并封装到变量中
                                                                  public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
                                                                                       @CookieValue(value = "username" , required = false) Cookie cookie, HttpServletRequest request) {
                                                                      //使用原生api获取cookies
                                                                      Cookie[] cookies = request.getCookies();
                                                                      for (Cookie cookie1 : cookies) {
                                                                          System.out.println(cookie1);
                                                                      }
                                                                      System.out.println(cookie_value);
                                                                      System.out.println("name:" + cookie.getName() + " value: " + cookie.getValue());
                                                                      return "success";
                                                                  }
                                                              }
                                                              
                                                              3.测试

                                                              SpringBoot(接受参数相关注解),image-20240314142646944,第8张

                                                              SpringBoot(接受参数相关注解),image-20240314142721839,第9张

                                                              2.细节说明
                                                              • @CookieValue可以根据后面要封装的参数的类型来获取指定的值,如果后面的类型是Cookie类型则会获取一个Cookie对象并封装进入,如果是String类型则会获取Cookie的value来进行封装
                                                              • 还可以通过Servlet原生api的request来获取所有的cookie
                                                              • @CookieValue中有属性required默认为true,意为必须存在,否则报错,如果设置为false,则如果获取不到则为null

                                                                6.@RequestBody 处理json请求,post请求体获取信息

                                                                1.代码实例
                                                                1.index.html
                                                                
                                                                
                                                                
                                                                    
                                                                    Title
                                                                
                                                                
                                                                

                                                                基本注解




                                                                2.ParameterController.java
                                                                package com.sun.springboot.controller;
                                                                import org.springframework.web.bind.annotation.*;
                                                                /**
                                                                 * @author 孙显圣
                                                                 * @version 1.0
                                                                 */
                                                                @RestController
                                                                public class ParameterController {
                                                                    @PostMapping("requestBody")
                                                                    public String getRequestBody(@RequestBody String requestBody) { //获取请求体
                                                                        System.out.println(requestBody);
                                                                        return "success";
                                                                    }
                                                                }
                                                                
                                                                3.测试

                                                                SpringBoot(接受参数相关注解),image-20240314144140750,第10张

                                                                SpringBoot(接受参数相关注解),image-20240314144151845,第11张

                                                                7.@RequestAttribute 请求域获取信息

                                                                1.代码实例
                                                                1.RequestController.java
                                                                package com.sun.springboot.controller;
                                                                import org.springframework.stereotype.Controller;
                                                                import org.springframework.web.bind.annotation.GetMapping;
                                                                import org.springframework.web.bind.annotation.RequestAttribute;
                                                                import org.springframework.web.bind.annotation.ResponseBody;
                                                                import javax.servlet.http.HttpServletRequest;
                                                                /**
                                                                 * @author 孙显圣
                                                                 * @version 1.0
                                                                 */
                                                                @Controller
                                                                public class RequestController {
                                                                    @GetMapping("/login")
                                                                    public String login(HttpServletRequest request) {
                                                                        //在Request域中存放一些信息
                                                                        request.setAttribute("name", "sun");
                                                                        request.setAttribute("age", 13);
                                                                        //调用视图解析器,请求转发到/ok
                                                                        return "forward:/ok";
                                                                    }
                                                                    @ResponseBody
                                                                    @GetMapping("/ok")
                                                                    public String ok(@RequestAttribute(value = "name", required = false) String name) { //使用注解来获取请求域中的信息并封装到参数中
                                                                        System.out.println("name: " + name);
                                                                        return "success"; //返回json给浏览器
                                                                    }
                                                                }
                                                                
                                                                2.配置视图解析器 application.yml
                                                                spring:
                                                                  mvc:
                                                                    view: #配置了视图解析器
                                                                      suffix: .html #后缀
                                                                      prefix: / #前缀,指的是根目录
                                                                
                                                                3.测试

                                                                SpringBoot(接受参数相关注解),image-20240314150044278,第12张

                                                                SpringBoot(接受参数相关注解),image-20240314150037970,第13张

                                                                8.@SessionAttribute session域获取信息

                                                                1.代码实例
                                                                1.SessionController.java
                                                                    package com.sun.springboot.controller;
                                                                    
                                                                    import org.springframework.stereotype.Controller;
                                                                    import org.springframework.web.bind.annotation.GetMapping;
                                                                    import org.springframework.web.bind.annotation.ResponseBody;
                                                                    import org.springframework.web.bind.annotation.SessionAttribute;
                                                                    
                                                                    import javax.servlet.http.HttpServletRequest;
                                                                    /**
                                                                     * @author 孙显圣
                                                                     * @version 1.0
                                                                     */
                                                                    @Controller
                                                                    public class SessionController {
                                                                    
                                                                        @GetMapping("/login")
                                                                        public String login(HttpServletRequest request) {
                                                                            //在session域中设置信息
                                                                            request.getSession().setAttribute("session", "session_value");
                                                                    
                                                                            //调用视图解析器,请求转发到/ok
                                                                            return "forward:/ok";
                                                                        }
                                                                    
                                                                        @ResponseBody
                                                                        @GetMapping("/ok")
                                                                        public String ok(@SessionAttribute(value = "session") String value) { //使用注解来获取session域中的信息并封装到参数中
                                                                            System.out.println("session: " + value);
                                                                            return "success"; //返回json给浏览器
                                                                        }
                                                                    }
                                                                
                                                                2.配置视图解析器(同上)
                                                                3.测试

                                                                SpringBoot(接受参数相关注解),image-20240314150939704,第14张

                                                                SpringBoot(接受参数相关注解),image-20240314150945894,第15张

                                                                9.复杂参数

                                                                1.代码实例
                                                                1.RequestController.java
                                                                package com.sun.springboot.controller;
                                                                import org.springframework.stereotype.Controller;
                                                                import org.springframework.ui.Model;
                                                                import org.springframework.web.bind.annotation.GetMapping;
                                                                import org.springframework.web.bind.annotation.RequestAttribute;
                                                                import org.springframework.web.bind.annotation.ResponseBody;
                                                                import javax.servlet.http.HttpServletResponse;
                                                                import java.util.Map;
                                                                /**
                                                                 * @author 孙显圣
                                                                 * @version 1.0
                                                                 */
                                                                @Controller
                                                                public class RequestController {
                                                                    @GetMapping("/login")
                                                                    public String login(Map map, Model model, HttpServletResponse response) {
                                                                        //给map封装信息
                                                                        map.put("user", "sun");
                                                                        map.put("job", "工程师");
                                                                        //model封装信息
                                                                        model.addAttribute("sal", 1000);
                                                                        //结果最后都会封装到request域中
                                                                        //调用视图解析器,请求转发到/ok
                                                                        return "forward:/ok";
                                                                    }
                                                                    @ResponseBody
                                                                    @GetMapping("/ok")
                                                                    public String ok(@RequestAttribute("user") String user, @RequestAttribute("job") String job,
                                                                                     @RequestAttribute("sal") Integer sal) { //使用注解来获取请求域中的信息并封装到参数中
                                                                        System.out.println("user:" + user + " job:" + job + " sal:" +sal);
                                                                        return "success"; //返回json给浏览器
                                                                    }
                                                                }
                                                                
                                                                2.测试

                                                                SpringBoot(接受参数相关注解),image-20240314153229824,第16张

                                                                SpringBoot(接受参数相关注解),image-20240314153238100,第17张

                                                                2.HttpServletResponse给浏览器设置cookie
                                                                1.代码实例
                                                                package com.sun.springboot.controller;
                                                                import org.springframework.stereotype.Controller;
                                                                import org.springframework.web.bind.annotation.CookieValue;
                                                                import org.springframework.web.bind.annotation.GetMapping;
                                                                import org.springframework.web.bind.annotation.ResponseBody;
                                                                import javax.servlet.http.Cookie;
                                                                import javax.servlet.http.HttpServletResponse;
                                                                /**
                                                                 * @author 孙显圣
                                                                 * @version 1.0
                                                                 */
                                                                @Controller
                                                                public class RequestController {
                                                                    @GetMapping("/login")
                                                                    public String login(HttpServletResponse response) {
                                                                        Cookie cookie = new Cookie("cookie_name", "cookie_value");
                                                                        response.addCookie(cookie);
                                                                        //调用视图解析器,重定向到/ok,不能使用请求转发,因为虽然响应给客户端cookie了,
                                                                        // 但是由于是请求转发,第二个controller得到的是最开始的请求,那时候还没有cookie
                                                                        return "redirect:/ok";
                                                                    }
                                                                    @ResponseBody
                                                                    @GetMapping("/ok")
                                                                    public String ok(@CookieValue("cookie_name") Cookie cookie) {
                                                                        //获取cookie
                                                                        System.out.println("key:" + cookie.getName() + " value:" + cookie.getValue());
                                                                        return "success"; //返回json给浏览器
                                                                    }
                                                                }
                                                                
                                                                2.测试

                                                                SpringBoot(接受参数相关注解),第18张

                                                                SpringBoot(接受参数相关注解),image-20240314155443305,第19张