@RequestAttribute

它只能使用在方法入参上,从request请求参数中获取对应的属性值。

  1. //路径跳转
  2. @GetMapping("/goto")
  3. public String goToPage(HttpServletRequest request){
  4. request.setAttribute("msg","成功了...");
  5. return "forward:/success"; //转发到 /success请求
  6. }
  1. @ResponseBody
  2. @GetMapping("/success")
  3. public Map success(@RequestAttribute(value = "msg",required = false) String msg,
  4. HttpServletRequest request){
  5. Map<String,Object> map = new HashMap<>();
  6. //HttpServletRequest方式获取请求参数
  7. Object msg1 = request.getAttribute("msg");
  8. map.put("msg1",msg1);
  9. //@RequestAttribute注解方式获取请求参数
  10. map.put("msg",msg);
  11. return map;
  12. }

请求参数:http://localhost:8080/goto

结果:{"msg":"成功了...","msg1":"成功了..."}

@MatrixVariable

用于获取路径中参数的属性

假如现在需要设计一个用于“搜索某部门某些员工可选信息中的部分信息”的API,我们分别使用查询字符串和路径name-value方式来设计对比,看看具体效果:

  • 查询字符串方式:

    /api/v1/users/optional-info?dept=321&name=joh*&fields=hometown,birth

问题:其中的dept和name理应属于users路径,而fields则属于optional-info路径,但现在全部都要挤在查询字符串中。

  • 路径name-value方式:

    /api/v1/users/depts=321;name=joh*/optional-fields/fields=hometown,birth

可以看出路径name-value的方式逻辑上更在理些。

使用方法

多个变量可以使用;分隔,例如:

  1. /cars;color=red;year=2012

如果是一个变量的多个值那么可以使用,分隔

  1. color=red,green,blu

或者可以使用重复的变量名:

  1. color=red;color=green;color=blue

属性

  • value :属性pathVar的别名;
  • pathVar :用于指定name-value参数所在的路径片段名称
  • name :用于指定name-value参数的参数名
  • required :是否为必填值,默认为false
  • defaultValue :设置默认值

举例

  1. /*
  2. 1. 获取单个路径片段中的参数
  3. 请求URI为 /Demo2/66;color=red;year=2020 */ @RequestMapping(path="/Demo1/{id}", method=RequestMethod.GET)
  4. public String test1(@PathVariable String id, @MatrixVariable String color, @MatrixVariable String year){}
  5. /*
  6. 2. 获取单个路径片段中的参数
  7. 请求URI为 /Demo2/color=red;year=2020
  8. */
  9. @RequestMapping(path="/Demo1/{id}", method=RequestMethod.GET)
  10. public String test2(@MatrixVariable String color, @MatrixVariable String year){}
  11. /*
  12. 3. 获取不同路径片段中的参数
  13. 请求URI为 /Demo2/66;color=red;year=2020/pets/77;color=blue;year=2019 */
  14. @RequestMapping(path="/Demo2/{id1}/pets/{id2}", method=RequestMethod.GET)
  15. public String test3(@PathVariable String id1,
  16. @PathVariable String id2,
  17. @MatrixVariable(name="color", pathVar="id1") String color1,
  18. @MatrixVariable(name="year", pathVar="id1") String year1,
  19. @MatrixVariable(name="color", pathVar="id2") String color2, @MatrixVariable(name="year", pathVar="id2") String year2){}
  20. /*
  21. 4. 获取不同路径片段中的参数
  22. 请求URI为 /Demo2/color=red;year=2020/pets/77;color=blue;year=2019
  23. */
  24. @RequestMapping(path="/Demo2/{id1}/pets/{id2}", method=RequestMethod.GET)
  25. public String test4(@PathVariable String id2,
  26. @MatrixVariable(name="color", pathVar="id1") String color1,
  27. @MatrixVariable(name="year", pathVar="id1") String year1,
  28. @MatrixVariable(name="color", pathVar="id2") String color2,
  29. @MatrixVariable(name="year", pathVar="id2") String year2){}
  30. /*
  31. 5. 通过Map获取所有或指定路径下的所有参数
  32. */
  33. @RequestMapping(path="/Demo3/{id1}/pets/{id2}", method=RequestMethod.GET)
  34. public String test5(@MatrixVariable Map<String, Object> all,
  35. @MatrixVariable(pathVar="id1") Map<String, Object> mapId1) {}

@RequestAttribute与@MatrixVariable的更多相关文章

  1. Spring @RequestAttribute

    @RequestAttribute注解用法 @RequestAttribute用在方法入参上,作用:从request中取对应的值,至于request中是怎么存在该属性的,方式多种多样,拦截器中预存.M ...

  2. 从原理层面掌握@RequestAttribute、@SessionAttribute的使用【一起学Spring MVC】

    每篇一句 改我们就改得:取其精华,去其糟粕.否则木有意义 前言 如果说知道@SessionAttributes这个注解的人已经很少了,那么不需要统计我就可以确定的说:知道@RequestAttribu ...

  3. @MatrixVariable的使用

    @MatrixVariable的使用 博客分类: J2EE   在Spring3.2 后,一个@MatrixVariable出现了,这个注解的出现拓展了URL请求地址的功能. Matrix Varia ...

  4. SpringBoot魔法堂:@MatrixVariable参数注解使用详解

    前言 RFC3986定义URI的路径(Path)中可包含name-value片段,扩充了以往仅能通过查询字符串(Query String)设置可选参数的囧境. 假如现在需要设计一个用于"搜索 ...

  5. Springboot使用MatrixVariable 注解

        根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对.规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加独特的 &qu ...

  6. springboot开启矩阵传参MatrixVariable

    /** *   根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对. * 规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加 ...

  7. SpringBoot中请求参数 @MatrixVariable 矩阵变量

    一.矩阵变量请求格式 /users;id=1,uname=jack 二.SpringBoot开启矩阵请求 首先查看springboot源码关于矩阵部分的内容 在 WebMvcAutoConfigura ...

  8. Spring MVC 学习总结(三)——请求处理方法Action详解

    Spring MVC中每个控制器中可以定义多个请求处理方法,我们把这种请求处理方法简称为Action,每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果. 一.Action参数类型 如果 ...

  9. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含多个Action(动作. ...

随机推荐

  1. 推荐一个pycharm验证xpath表达式的插件XPathView +​ XSLT

    使用Appium进行自动化测试,使用xpath元素定位,想验证xpath定位是否正确,可以使用在线的xpath验证网站,也可以使用这次推荐的插件XPathView +​ XSLT.

  2. pyqt5设计无边框窗口(一)

    import sys from PyQt5 import QtGui,QtCore from PyQt5 import QtCore, QtGui, QtWidgets ############### ...

  3. P6122-[NEERC2016]Mole Tunnels【模拟费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P6122 题目大意 给出\(n\)个点的一棵满二叉树,每个点有容量\(c_i\),\(m\)次从\(p_i\)处加一 ...

  4. Three 之 Animation 体验一

    Animation 体验一 动画效果 其中涉及到 skeletion.clipAction.GUI Skeletion 在建模软件中可导出 skeletion,这里安利一个可以创建动画的网站 http ...

  5. Java基础- 重写,重构和重载

    重写也称为覆盖, 是指子类与父类的方法名相同但是可以有不同的权限(子类权限需大于父类),返回值(J2SE 5.0以后增加的功能,且子类的返回值必须是父类返回值的子类)或者方法实现. 重写体现了子类补充 ...

  6. C 输入输出函数

    流 就C程序而言,所有的I/O操作只是简单地从程序移入或移出字节的事情.这种字节流便称为流( stream ). 绝大多数流是完全缓存的,这意味着"读取"和"写入&quo ...

  7. HCNP Routing&Switching之BGP报文结构、类型和状态

    前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...

  8. NX开发库版本问题

    有做NX二次开发的朋友经常问我这样的问题:我在NX8.0上开发的程序,可以在NX9.0上运行吗? 由于NX的开发库随着版本的更新也会不断更新,会增加新的方法,同时有些也会过时或者消失. 如下图:NX8 ...

  9. 使用固件库点亮led灯

    1. 项目 使用STM32F103VE的固件库实现流水灯设计. 2. 代码 由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的. 点亮绿灯: main.c #include " ...

  10. 使用docker部署nginx并配置https

    我只有一台服务器,但我想在这台服务器上运行多个项目,怎么办? 总不能靠加端口区分吧? 百度和Google是个好东西,于是我找到了答案,使用nginx. 通过nginx,我可以给我的一台服务器配置两个域 ...