Jersey POST 请求并关闭 InputStream
Posted
技术标签:
【中文标题】Jersey POST 请求并关闭 InputStream【英文标题】:Jersey POST Requests and closing the InputStream 【发布时间】:2014-08-31 15:57:35 【问题描述】:当我在 Jersey 中有一个监听 POST 请求的方法,并且当我在要从中获取数据的方法中有一个 InputStream 作为参数时,我需要关闭这个 InputStream 还是由 Jersey 处理这个?
我没有找到任何关于它的信息。不久前我读过带有 JAX-RS 2.0 的 RESTful Java,但我不记得是否提到过。现在浏览了一下,发现了几个代码示例,并且流没有关闭。我觉得没必要,但想问问。
【问题讨论】:
你找到答案了吗?我将把 inputStream 作为引用变量传递给 EJB 并在 try-finally 块中将其关闭。你怎么看? @AzamatAlmukhametov 我也想知道你是否找到了答案 【参考方案1】:如何获得 InputStream 引用?通过 MessageBodyReader?在这种情况下,如果您使用的是 MessageBodyReader,则不能关闭 InputStream。文档中甚至对此有明确的警告。
7.2.2.2. MessageBodyReader.readFrom
无论如何,此链接适用于 Jersey v2。我不知道版本 1 是什么。你用的是哪个版本?
【讨论】:
抱歉回复晚了。它不在 MessageBodyReader 中,我已经知道不要关闭那些或 MessageBodyWriter 中的输出。这是您在执行 POST 请求时获得的 InputStream。未使用@QueryParam
或 @PathParam
之类的注释的方法参数是 InputStream 或从客户端发送到服务器的数据。【参考方案2】:
我有同样的问题,但当前的答案没有回答不使用MessageBodyReader
时的问题。对于那些确实想知道在 SO 上还有其他两个答案的人(one,two)
简短的回答和总结是在 InputStream 上调用close()
。
背景:
一个用户调试了它,流没有自动关闭close()
方法是幂等的,因此第二次调用不会受到伤害
大多数用户说要 close() 或使用可关闭的 try-with-resources-statements
【讨论】:
以上是关于Jersey POST 请求并关闭 InputStream的主要内容,如果未能解决你的问题,请参考以下文章
jersey rest post 访问为http 405 异常如何解决