泽西岛Http客户端在POST请求中回复411

时间:2016-05-10 15:26:19

标签: java jersey apache-httpclient-4.x

我正在使用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有关。

1 个答案:

答案 0 :(得分:2)

默认情况下,HttpClientConnectionManager将ClientProperties.REQUEST_ENTITY_PROCESSING设置为CHUNKED。 作为一种解决方案,我将其设置为BUFFERED并且有效。

ClientConfig configuration = new ClientConfig(); configuration.property(ClientProperties.REQUEST_ENTITY_PROCESSING,RequestEntityProcessing.BUFFERED);