java - Jersey Http 客户端在 POST 请求上回复 411

标签 java jersey apache-httpclient-4.x

我正在使用 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/

相关文章:

java - 如何改进生成多重集组合的算法?

java - 无法输出使用两个对象的ArrayList

java - 如何让jetty ErrorHandler在java中以json格式显示错误

java - HttpClient 给出与 NTLM 身份验证提供程序的协商错误

Java Async Http 客户端比较

java - JTable 单元格中的 JComboBox。选择更改会影响其他行中的 JComboBox

java - Jersey:mysql java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 虽然包含在内

java - 带有子对象的 pojo 的 JSON 序列化

java - 无法以编程方式登录网站

java - 如何使用对象中的数据创建具有唯一对象的集合进行比较?