![](/img/trans.png)
[英]Jersey http client: put request with custom Content-Length
[英]Jersey Client (2.4) - PUT InputStream but Content-Length = 0
我正在尝试向Jersey REST service
发出请求,该Jersey REST service
使用PUT
方法将InputStream
作为实体接受。
当我这样做时,Jersey客户端将Content-Length
标头设置为0。
REST服务要求将Content-Length
设置为流的实际大小(即文件的大小),但是,每当我尝试设置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)上的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.ImmutableHttpProcessor.process(ImmutableHttpProcessor)上的org.apache.http.protocol.RequestContent.process(RequestContent.java:96) .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
因此,所有关于为何Jersey / Apache HTTP Client
将Content-Length
标头设置为0,以及为什么我无法覆盖Content-Length
标头的想法
我正在使用:
带有ApacheConnector
Jersey 2.4.1
提前致谢
将
只是为了回答这个问题:
这是ApacheConnector的问题,它将始终为内容的大小返回-1,以确保从未设置此值。 (这在getHttpEntity方法中进行了硬编码)
因此,如果需要的Content-Length头,一个或者具有重新实现ApacheConnector如所描述的此处或使用不同的连接器。
我已经在泽西岛吉拉报道了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.