15.springboot接受前台传来的值
2022/5/11 23:14:50
本文主要是介绍15.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))
这篇关于15.springboot接受前台传来的值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现