我正在尝试向使用Jersey REST service
方法接受InputStream
作为实体的PUT
发出请求。
当我这样做时,Jersey客户端将Content-Length
标头设置为0。
REST服务要求Content-Length
设置为流的实际大小(IE是文件的大小),但是,每当我尝试设置Content-Length
客户端抛出时:< / p>
org.apache.http.ProtocolException:Content-Length标头已经存在 本
要注意 - 当我添加Content-Length标头时,不会抛出异常(此时,此标头不存在),当Jersey / Apache HTTPClient
尝试添加{时,它会被抛出(我假设)稍后{1}}标题值。
如果有任何帮助则堆叠:
引起:org.apache.http.client.ClientProtocolException 在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909) 在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.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) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) ......还有42个
所以,为什么0
将Jersey / Apache HTTP Client
标头设置为0的任何想法,以及为什么我无法覆盖Content-Length
标题
我正在使用:
带有Content-Length
的 Jersey 2.4.1
提前致谢
威尔
答案 0 :(得分:-1)
回答这个问题:
这是ApacheConnector的问题,对于内容的大小,它总是返回-1,确保永远不会设置此值。 (这是在getHttpEntity方法中硬编码的)
因此,如果需要内容长度标头,则必须按照here所述重新实现ApacheConnector,或使用其他连接器。
我在Jersey jira报道过这个。