Servlets 将ServletInputStream转换为字符串

Servlets 将ServletInputStream转换为字符串,servlets,inputstream,Servlets,Inputstream,我试图以字符串形式获取HttpServletRequest的主体。最好的优雅方式是什么?使用: 另一方面,使用: 另请参见: 使用request.getInputStream(),我希望@skaffman可以这样做,但是我必须阅读请求正文两次。一次获取json对象,下一次获取字符串和I always get stream已经关闭。有什么想法吗?tsunade21,你的评论毫无意义。上面的答案告诉您如何将输入流转换为字符串。需要读取同一个流两次很可能是一个bug。在两个地方都使用结果字符串。@

我试图以字符串形式获取HttpServletRequest的主体。最好的优雅方式是什么?

使用:

另一方面,使用:

另请参见:


使用
request.getInputStream()
,我希望@skaffman可以这样做,但是我必须阅读请求正文两次。一次获取json对象,下一次获取字符串和I always get stream已经关闭。有什么想法吗?tsunade21,你的评论毫无意义。上面的答案告诉您如何将输入流转换为字符串。需要读取同一个流两次很可能是一个bug。在两个地方都使用结果字符串。@James Moore,我想我以前没有很好地解释过自己。我必须读取同一个流两次,因为我使用的是jackson映射,它自动读取流,而不给我任何控制。我终于修复了它,使用gson而不是jackson映射。@JamesMoore是对的,读取两次流是一个错误。您可以从用户浏览器中无法控制的源读取流。根本无法告诉客户“嘿,请再发送一次数据好吗?”
String requestStr = IOUtils.toString(request.getInputStream());
ByteSource.wrap(ByteStreams.toByteArray(request.getInputStream()))
    .asCharSource(Charsets.UTF_8).read()