我正在使用 Jersey HTTP 客户端发送 POST 请求并接收响应中的 411 内容长度丢失。 然而,并非在所有情况下都会引发此错误。有一些调用我使用 json 内容类型并且工作正常。
对于这个特定的请求,我将请求发送到特定的 URL,我收到了 411 Content Length required。虽然使用相同的负载,但当我使用不同的 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 有关。
最佳答案
HttpClientConnectionManager 默认将 ClientProperties.REQUEST_ENTITY_PROCESSING 设置为 CHUNKED。 作为解决方案,我将其设置为 BUFFERED 并且它起作用了。
ClientConfig 配置 = new ClientConfig(); 配置.property(ClientProperties.REQUEST_ENTITY_PROCESSING,RequestEntityProcessing.BUFFERED);
关于java - Jersey Http 客户端在 POST 请求上回复 411,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142850/