首页 文章

Jersey Client(2.4) - PUT InputStream但Content-Length = 0

提问于
浏览
0

我正在尝试向 Jersey REST service 发出请求,该请求使用 PUT 方法接受 InputStream 作为实体 .

当我这样做时,Jersey客户端将 Content-Length 标头设置为0 .

REST服务要求 Content-Length 设置为流的实际大小(IE是文件的大小),但是,每当我尝试设置 Content-Length 时,客户端抛出:

org.apache.http.ProtocolException:Content-Length标头已存在

要注意 - 当我添加Content-Length标头时,不会抛出异常(此时,当 Jersey / Apache HTTPClient 稍后尝试添加 0 标头值时,此标头不会被抛出(我假设) .

如果它有任何帮助,请堆叠:

由org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909)org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient)中的org.apache.http.client.ClientProtocolException引起.java:827)org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:326)... 40更多引起:org.apache.http.ProtocolException:Content-Length标头已经出现在org .apache.http.protocol.RequestContent.process(RequestContent.java:96)org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:109)org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor) .java:176)org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:518)at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)...还有42个

所以,为什么 Jersey / Apache HTTP ClientContent-Length 标头设置为0的任何想法,以及为什么我无法覆盖 Content-Length 标头

我正在使用:

Jersey 2.4.1ApacheConnector

提前致谢

1 回答

  • 0

    只是回答这个问题:

    这是ApacheConnector的问题,对于内容的大小,它总是返回-1,确保永远不会设置此值 . (这是在getHttpEntity方法中硬编码的)

    因此,如果需要content-length头,则必须重新实现ApacheConnector,如here所述,或者使用不同的连接器 .

    我在Jersey jira报道过这个 .

    https://java.net/jira/browse/JERSEY-2373

相关问题