我正在使用Jersey HTTP Client发送POST请求并在响应中丢失411内容长度。 但是,在所有情况下都不会抛出此错误。有一些调用,我正在使用json内容类型,它工作正常。
对于我将请求发送到特定URL的特定请求,我收到了411内容长度。当我使用不同的URL时使用相同的有效负载,它工作正常。
这就是我在Jersey客户端请求中设置表单实体的方式
public static MultivaluedMap<String, String> getMultivaluedMapRequest(Map<String, String> map) {
MultivaluedMap<String, String> bodyParams = new MultivaluedHashMap<String, String>();
if (null != map && map.size() > 0) {
for (Entry<String, String> param : map.entrySet()) {
bodyParams.add(param.getKey(), param.getValue());
}
}
return bodyParams;
}
private static Entity<?> getRequestEntity(final HttpRequestPayload<?> payload) {
if (payload.getEntity() instanceof MultivaluedMap<?, ?>) {
return Entity.form((MultivaluedMap<String, String>) payload.getEntity());
} else {
return Entity.entity(payload.getEntity(), payload.getMediaTypeProduced());
}
}
这就是打电话的方式
final Entity<?> entity = getRequestEntity(payload);
Response response = target.request(payload.getMediaTypeConsumed()).headers(payload.getHeaders()).post(entity);
我不确定问题是什么。我认为它与我发送请求的URL有关。
答案 0 :(得分:2)
默认情况下,HttpClientConnectionManager将ClientProperties.REQUEST_ENTITY_PROCESSING设置为CHUNKED。 作为一种解决方案,我将其设置为BUFFERED并且有效。
ClientConfig configuration = new ClientConfig(); configuration.property(ClientProperties.REQUEST_ENTITY_PROCESSING,RequestEntityProcessing.BUFFERED);