2016-05-10 16 views
1

私は、Jersey HTTPクライアントを使用してPOST要求を送信し、応答で411コンテンツ長が不足しています。 しかし、このエラーはすべての場合にスローされません。私はjsonのコンテンツタイプを使用しているいくつかの呼び出しがあり、それは正常に動作しています。ジャージHttpクライアントがPOST要求で411で返信する

特定のURLにリクエストを送信しているこの特定のリクエストでは、411コンテンツ長が必要です。私は別のURLを使用しているときに同じペイロードでそれは正常に動作している間。

これは私がジャージーのクライアント要求

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

bodyParamsが空かどうかを確認しますか?空の場合 - > 411ステータスはコンテンツが投稿されていないためです。 – Loc

+0

bodyParamsにはデータがあります。空ではありません。 –

+0

はそれを解決できました! –

答えて

2

HttpClientConnectionManagerには、デフォルトでCHUNKEDに設定されたClientProperties.REQUEST_ENTITY_PROCESSINGがあります。 解決策として、私はそれをBUFFEREDに設定しました。

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

関連する問題