Request里如何获取@RequestBody对应的参数?

发布于 2022-09-11 18:02:31 字数 348 浏览 12 评论 0

springcloud中
假如后端服务有

@RequestMapping("/test")
pubilc void test(@RequestBody MyPram myParam){
    ...
}

在zuul网关的过滤器中,我要获取myParam的值,

    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();
    

然后如何通过Request获取myParam的值?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

养猫人 2022-09-18 18:02:31

既然能拿到request了。
那么可以直接request.getParamXXXXX() 具体方法名忘了

ㄟ。诗瑗 2022-09-18 18:02:31

补充:抱歉没有看到是在zuul网关里,不过通过RequestContext拿到了HttpServletRequest那应该是一样可以这么做的。
@RequestBody用于接收http请求的请求体(request body),在HttpServletRequest里是以流的方式传输的。

我这里使用RestClient发送一个HttpPost请求:

clipboard.png

在Controller里(只要能拿到HttpServletRequest的地方就可以),我用fastjson去接收并且转换成java bean,代码如下:

@RequestMapping("/param")
@ResponseBody
public Article param(HttpServletRequest request) throws IOException {
    ServletInputStream inputStream = request.getInputStream();
    Article article = JSONObject.parseObject(inputStream, Charset.forName("UTF-8"), Article.class);
    return article;
}

我把客户端发送的数据(Article对象)原样返回,得到的结果是这样的:

clipboard.png

仅此而已 2022-09-18 18:02:31
String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
MyParam myParam = JSON.parseObject(body,MyParam.class);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文