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

springcloud中
假如后端服务有

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

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

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

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

阅读 25.7k
3 个回答
String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
MyParam myParam = JSON.parseObject(body,MyParam.class);

补充:抱歉没有看到是在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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题