2016-05-10 10 views
1

Ich benutze Jersey HTTP-Client zum Senden von POST-Anfrage und Empfangen von 411 Content-Länge fehlt als Antwort. Dieser Fehler wird jedoch nicht in allen Fällen ausgelöst. Es gibt einige Anrufe, wo ich json Inhaltstyp verwende und es funktioniert gut.Jersey Http Client antwortet mit 411 auf POST-Anfrage

Für diese spezielle Anfrage, wo ich die Anfrage an eine bestimmte URL senden ich bin 411 Content Länge erforderlich. Während mit der gleichen Nutzlast, wenn ich eine andere URL verwende, funktioniert es gut. Diese

ist, wie ich bin die Einrichtung Formular Entity in Jersey Client Request

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()); 
    } 
} 

Dies ist, wie der Anruf

gemacht wird
final Entity<?> entity = getRequestEntity(payload); 

Response response = target.request(payload.getMediaTypeConsumed()).headers(payload.getHeaders()).post(entity); 

Ich bin nicht sicher, was das Problem ist. Ich denke, es hat etwas mit der URL zu tun, an die ich die Anfrage sende.

+0

Überprüfen, ob bodyParams leer oder nicht? Wenn leer -> 411 Status, weil kein Inhalt gepostet wurde. – Loc

+0

bodyParams hat Daten. Es ist nicht leer. –

+0

geschafft, es zu lösen !! –

Antwort

2

In HttpClientConnectionManager ist ClientProperties.REQUEST_ENTITY_PROCESSING standardmäßig auf CHUNKED gesetzt. Als Lösung habe ich es auf BUFFERED gesetzt und es hat funktioniert.

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