Tool Baba
首页
开发
查看分类详情
JSON格式化
ASCII工具
CSS格式化
JS格式化
文本在线编码转换
GUID/UUID生成工具
图片base64编码工具
文本比对工具
base64还原图片
经纬度坐标系转换
Unix时间戳转换
占位图片
颜色空间转换
hex转str
进制转换器
字符串长度计算
字符出现次数统计
字符串出现次数统计
对照参考
查看分类详情
Content Type对照表
HTTP STATUS CODE对照表
Ascii对照表
HTTP转义字符表
网页字体参考
常见端口
运算符优先级
颜色参考
通用工具
查看分类详情
二维码在线生成
条形码在线生成
网址短链生成
单位转换
查看分类详情
长度单位转换
面积单位转换
功率/能量单位转换
压力单位转换
体积单位转换
重量单位转换
杂货百科
查看分类详情
随机密码生成
周公解梦
历史上的今天
人民币大写在线转换
字母大小写转换
免费代理IP
稿纸下载
码农文库
注册/登录
原创
Spring中如何动态获取PathVariable/RequestParam/RequestBody参数
9371 人阅读了本文章
2019-10-12 14:25
####前言 近期公司成立了一个新项目,在实现过程中需要动态的从HttpServletRequest 请求中获取通过uri path/request param/request body传入的各种参数,在此做一些记录和备忘,以便后期追溯。 ps:基于spring boot ####1.uri path参数值的获取(即通过@PathVariable标识的参数) 以请求地址 /data/{dataId}/detail.json 为例,如何基于request获取传入的dataId参数值 ```java public void getDataId(HttpServletRequest request){ //String URI_TEMPLATE_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".uriTemplateVariables"; Map attrMap = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); Object dataIdObj = attrMap.get("dataId"); System.out.println(dataIdObj); } ``` ####2.request param参数值的获取 以请求地址 /data/detail.json?dataId=100 为例,如何基于request获取传入的dataId参数值 ```java public void getDataId(HttpServletRequest request) { String dataIdStr = request.getParameter("dataId"); System.out.println(dataIdStr); } ``` ####3.request body参数值的获取 request body的获取相对来讲比较麻烦,传统方式是直接通过request直接读取,但会有Required request body is missing 的坑,会影响后续的数据读取(可以自定义request wrapper解决)。 由于我项目需求是动态获取,因此使用了AOP对方法执行做了拦截,在AOP中可以简单的实现request body参数的获取,以下的代码 ```java @Aspect @Component @Order(3) public class AuthResourceAspect { @Pointcut("@annotation(com.**.**.Auth***)") public void controllerAspect() { } @Before("controllerAspect()") public void around(JoinPoint jp) { Object[] args = jp.getArgs(); //request body通过Controller方法参数进行注入 System.out.println("请求参数对象"+args); } } ``` 关于如何获取HttpServletRequest 可参考 https://www.toolbaba.cn/a/6