ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

15.springboot接受前台传来的值

2022-05-11 22:03:15  阅读:202  来源: 互联网

标签:low map 15 请求 brand String 前台 path springboot


1.注解

注意:绑定到map上的,获取到的属性类型都是String!
1.注解 :
    1.1路径变量获取
            @PathVariable获取请求路径上的传参:
            示例:(两种用法)
                //1.标注在方法属性上:@PathVariable("id") String id并指定请求路径上绑定的名称
                //2.标注在Map<String,String>属性上(注意:map的类型必须是<String,String>),是将请求路径的key和对应的value全部传入
                @GetMapping(value = "/user/{id}/owner/{name}")
                public Map<String,Object> getUser(@PathVariable("id") String id,
                                      @PathVariable("name") String name,
                                      @PathVariable Map<String,String> pv){
                
                    System.out.println("路径传参:id"+id+" name:"+name);
                    Map<String, Object> map=new HashMap<String, Object>();
                    map.put("id", id);
                    map.put("name",name);
                    map.put("map_pv", pv);
                    return map;
                }
            此时浏览器输入:http://localhost:8080/user/18/owner/吴孟达/
            页面输出:{"map_pv":{"id":"18","name":"吴孟达"},"name":"吴孟达","id":"18"}
            控制台输出:路径传参:id:18 name:吴孟达

    1.2获取请求头里的信息
        @RequestHeader来获取浏览器请求头里的信息
        示例:用法和@PathVariable类似,有两种用法
            1.对应请求头里的某一条信息
            2.@RequestHeader Map<String, String> headers,标注map,注意Map必须是String,String将请求头中的信息全部放入到map中
            @RequestMapping("/getHead")
            public Map<String,Object> getHeader(@RequestHeader("User-Agent") String userAgent,//获取请求头中的User-Agent
                                                @RequestHeader("Host") String host,//获取请求头中的Host
                                                @RequestHeader Map<String, String> headers){//将所有请求头中的信息全部放入到map中
                Map<String, Object> map = new HashMap<> ();
                map.put("user-agent", userAgent);
                map.put("host", host);
                map.put("headerAll", headers);
                return map;
            }
            
    1.3获取请求参数
        @RequestParm来获取请求参数
        示例:用法和上述一致,有两种用法
        1.对应请求参数中的某一项
        2.@RequestParam Map<String,String> parms_Map,标注一个map,接收所有的请求参数,一样的map类型必须是String,String
        @RequestMapping("/getParms")
        public Map<String, Object> getParameters(@RequestParam("age") Integer age,//标注请求参数中的age
                                                 @RequestParam("names") List<String> names,//标注请求参数中的names
                                                 @RequestParam Map<String,String> parms_Map//将所有的请求参数都放入一个map中
                                                 ){
            Map<String, Object> map = new HashMap<> ();
            map.put("age", age);
            map.put("names",names);
            map.put("parms_All", parms_Map);
            return map;
        }
        当请求路径是:http://localhost:8080/getParms?age=18&names=吴孟达&names=刘丹
        注意!!,请求参数中的names有两个值:吴孟达和刘丹,所有后台使用list来接收names
        页面输出:发现map接收的重复name参数时,只会放入第一个
            {"parms_All":{"age":"18","names":"吴孟达"},"names":["吴孟达","刘丹"],"age":18}
            
            
    
    1.4获取cookie的值
        @CookieValue标签获取cookie的值
        用法也是两种:
        第一种:指定cookie的key,获取指定cookie的值
        第二种:@CookieValue Cookie cookie将cookie的所有信息封装到Cookie对象中
        示例如下:
            @RequestMapping("/getCookie")
            public void getCookie(@CookieValue("_ga") String _ga,@CookieValue Cookie cookie){
                System.out.println("cookie_ga:"+_ga);
                System.out.println(cookie.getName()+":"+cookie.getValue());
            }
            
            
    1.5获取请求体的内容(浏览器发起post请求时,获取 requestBody中的内容)
            示例:
                页面代码是:
                    <form action="/saveUser" method="post" >
                        姓名:<input name="userName"><br>
                        邮箱:<input name="email"><br>
                        <input type="submit" value="提交">
                    </form>
                控制类处理代码是:
                       @RequestMapping("/saveUser")
                        public void saveUser(@RequestBody String content){//获取的是请求体中的内容
                            System.out.println(content);
                        }  
                页面输出:
                    userName=wmd&email=244594537

 1.6获取请求域中的属性
        @RequestAttribute获取请求域中的值
        示例,是将请求转发到另外一个请求上,第一个请求往请求域中放东西,下一个请求中获取请求域中的东西
    示例:
        @Controller
        public class RequestController {
            @RequestMapping("/goto")
            public String goToPage(HttpServletRequest request){
                request.setAttribute("msg","成功了...");
                request.setAttribute("code",200);
                return "forward:/success";
            }
        
            @RequestMapping("/success")
            @ResponseBody
            public void success(@RequestAttribute("msg")String msg,
                                @RequestAttribute("code")Integer code,
                                HttpServletRequest requestA){
                System.out.println("msg:"+msg);
                System.out.println("code:"+code);
            }
        }

矩阵变量

矩阵变量:在路径变量里配置了请求参数,又和路径变量不同,多个请求参数以分号隔开!
例子:
    请求路径为:/cars/{path;low=34;brand=byd,audi,yd}-->一个key对应多个值时以逗号隔开,例如brand,多个键值对以分号隔开,例如path/lown.brand
    上述请求路径也可以改为:/cars/{path;low=34;brand=byd;brand=audi;brand=yd}
这样形式的变量叫做矩阵变量!

相关面试题目:在页面开发中如果cookie被禁用了,session中的内容如何使用??

cookie和session的内容可以参考:java-web中的cookie和session
文档:20.cookie和session.note
链接:http://note.youdao.com/noteshare?id=23cfc809611ae9811d564e402932862f&sub=D9A782917DDB42869990EC6105C04EDC

基本内容是:cookie保存着sesion的id(jsessionid),可以根据此id获取到session,但是如果cookie被禁用了,该jseesionid无法传到后台,应该如何做,
可以使用矩阵变量,重写url:
    改为:/abc;jsessionid=xxxx将sesionid传入后台
    
后台使用来获取
矩阵变量的使用步骤:
    1.必须往容器中注册自己的一个组件
        自定义配置类中新增组件:设置RemoveSemicolonContent为false,意思是分号后的东西生效
        @Configuration
        public class WebConfig {
            @Bean
            public WebMvcConfigurer webMvcConfigurer(){
                return new WebMvcConfigurerAdapter() {
                    @Override
                    public void configurePathMatch(PathMatchConfigurer configurer) {
                        UrlPathHelper urlPathHelper=new UrlPathHelper();
                        //这个设置至关重要:默认是true,该设置是否移除请求路径中分号后的内容。矩阵变量全凭分号,所以此处改为false,使矩阵变量生效
                        urlPathHelper.setRemoveSemicolonContent(false);
                        configurer.setUrlPathHelper(urlPathHelper);
                    }
                };
            }
        }
    2.控制类的写法:请求路径是:http://localhost:8080/car/sell;low=12;brand=宝马, 奥迪
            @RequestMapping("/car/{path}")
            public void carsSell(@MatrixVariable("low") Integer low,
                                 @MatrixVariable("brand")List<String> brand,
                                 @PathVariable("path") String path){
                System.out.println("矩阵变量-->low:"+low);
                System.out.println("矩阵变量-->brand:"+brand);
                System.out.println("路径变量:path:"+path);
            }
            可以正常拿到,控制台输出:
                矩阵变量-->low:12
                矩阵变量-->brand:[宝马, 奥迪]
                路径变量:path:sell
                
    3.如果路径是:http://localhost:8080/car/sell;low=12;brand=宝马, 奥迪/save;low=13;brand=byd, 吉利
    如果想获取到byd和吉利用上面的@MatrixVariable直接获取就不对了,需要指定是哪个路径了
    可以这么写:使用pathVar 指定是哪个路径变量上的矩阵变量
        @RequestMapping("/car/{path}/{save}")
        public Map carsSell(@MatrixVariable(value = "low",pathVar = "path") Integer low,
                            @MatrixVariable(value = "brand",pathVar = "path")List<String> brand,
                            @PathVariable("path") String path,
                            @PathVariable("save") String save,
                            @MatrixVariable(value = "low",pathVar = "save")Integer low_save,
                            @MatrixVariable(value = "brand",pathVar = "save") List<String> brand_save
                            ){
            System.out.println("矩阵变量-->low:"+low);
            System.out.println("矩阵变量-->brand:"+brand);
            System.out.println("路径变量:path:"+path);
            System.out.println("矩阵变量-->brand_save:"+brand_save);
            Map<String, Object> map=new HashMap<>();
            map.put("low",low);
            map.put("brand", brand);
            map.put("path", path);
            return map;
        }
 

后台通过javabean接受传来的参数

实体类的写法:
    1.Person类
            @Data
            @AllArgsConstructor
            @NoArgsConstructor
            @ToString
            public class Person {
                private Integer age;
                private String name;
                private Pet pet;
            }
    2.Pet类的写法
            @Data
            @AllArgsConstructor
            @NoArgsConstructor
            @ToString
            public class Pet {
                private Integer age;
                private String name;
            }
    3.控制类的写法
            @RequestMapping("/savePerson")
            //使用实体类接受前台传来的值
            public String savePerson(Person person){
                System.out.println("前台传来的person:"+person.toString());
                return person.toString();
            }
    
    测试:当前台传来:http://localhost:8080/savePerson?age=18&name=wmd&pet.name=ld&pet.age=18
    控制台输出:前台传来的person:Person(age=18, name=wmd, pet=Pet(age=18, name=ld))

 

标签:low,map,15,请求,brand,String,前台,path,springboot
来源: https://www.cnblogs.com/wmd-l/p/16260100.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有