【发布时间】:2011-04-19 09:39:36
【问题描述】:
我正在 HTTP POST 到 URL http://laptop:8080/apollo/services/rpc?cmd=execute
与 发布数据
{ "jsondata" : "data" }
Http 请求的 Content-Type 为 application/json; charset=UTF-8
如何从 HttpServletRequest 获取 POST 数据(jsondata)?
如果我枚举请求参数,我只能看到一个参数, 这是“cmd”,而不是 POST 数据。
【问题讨论】:
-
这是获取请求数据的简单方法
request.getReader().lines().collect(Collectors.joining()) -
上述抛出流已经关闭异常
-
如果你使用
getReader(),流将被关闭,因为最初它只能被读取一次。 Wrapper 实现有许多替代方案,允许多次调用getReader() -
解决此问题的最简单方法是使用 Jackson 的
ObjectMapper。它的重载方法readValue有一个变体,它接受Reader和Class<T>。你最终得到的是:new ObjectMapper().readValue(request.getReader(), YourBodyType.class)- 你有它。短而光滑。