springboot 用实体类接受参数后如果想获取完整请求数据怎么办?

2022-09-23 17:48:15 +08:00
 Ufo666

在 controller 那里,如果我用一个实体类接收参数,那我日志如何获取本次请求携带的完整 body ?(例如一些错误数据,攻击的非法数据等等) 我能想到的就是直接用 JsonObject 或者 map 或者 string 来接受 。。大佬们还有其他办法吗

1091 次点击
所在节点    问与答
14 条回复
guisheng
2022-09-23 17:51:12 +08:00
request 怎么样
Ufo666
2022-09-23 17:55:26 +08:00
@guisheng 我试过在 aop 那里拿到 request 再拿 body ,但拿出来的只有 params..我再去研究研究
ToDyZHu
2022-09-23 17:56:26 +08:00
写个 aop 在里面用可以获取到接口方法的参数 是 Object[] 你怎么处理都行
wolfie
2022-09-23 18:00:08 +08:00
在 filter 搞。
再看看 Http 包含哪些信息。操作 HttpServetRequest
lyhang
2022-09-23 18:02:18 +08:00
HttpServletRequest
Ufo666
2022-09-23 18:02:29 +08:00
request.getReader()和 request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常
Ufo666
2022-09-23 18:03:05 +08:00
框架已经读了一次了,我再读会报错
lyhang
2022-09-23 18:04:57 +08:00
request.getParameterNames()
然后循环取
Ufo666
2022-09-23 18:09:01 +08:00
@ToDyZHu aop 拿到的 request 是读取过的了,不能再读了
ningmengmao
2022-09-23 18:46:35 +08:00
可以自定义 http message coverter ,在类型反序列化时操作
doraon
2022-09-23 18:58:22 +08:00
重写 HttpRequestWrapper
v2eb
2022-09-23 19:03:25 +08:00
重写的时候注意, 上传文件请求需要重写的方法不太一样, 可以直接放行
swczxf
2022-09-23 19:20:02 +08:00
@Ufo666 你都知道只能读取一次了,怎么解决不就百度一下的事情吗
qinxi
2022-09-24 15:08:33 +08:00
spring 已经提供好了 CommonsRequestLoggingFilter

开启一下就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882471

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX