Spring Rest Template Müllfehler Antwort Körper

Sep 15 2020

Ich habe die folgende Restvorlage Konfiguration:

@Bean
public RestTemplate restTemplate() {
    RestTemplate template = new RestTemplate();
    template.getMessageConverters().add(new ObjectToUrlEncodedConverter());
    return template;
}

ObjectToUrlEncodedConverterwird wie aus dieser Antwort kopiert

Und ich rufe die restliche API wie unten erwähnt auf:

try {
        response = template.exchange(uri, httpRequestObject.getMethod(), requestEntity, httpRequestObject.getResponseClass());
        responseObject.setHeaders(response.getHeaders().toSingleValueMap());
        responseObject.setHttpStatus(response.getStatusCode());
        responseObject.setResponseBody(response.getBody());
    } catch (HttpStatusCodeException ex) {
        log.error("Non OK response received from server. Status code: {}, response: {}", ex.getStatusCode(), ex.getResponseBodyAsString());
        throw ex;
    }

Das Problem, mit dem ich konfrontiert bin, ist, wenn die Antwort 4xx oder 5xx Serie ist, Der Antworttext ex.getResponseBodyAsString()gibt Müllwerte an. So etwas in der Art: �0E%ܙ6�1�Y������hP��N��\]8���w���+Q��\�:S�Ȕ�������뚈M�'Z�� ml ) @ ] B͎ L ؏ 4 Ğ V ` V Qx F <{Q / fZ S 3RNy > ć ] S + Е = ! x9 ) Ԏ n%

Ich habe versucht Charset, den Wert auf "UTF-8" zu setzen, während ich den errorResponseBody wie folgt erhalten habe.

ex.getResponseBodyAsString(Charset.forName("UTF-8"))

Erstellen Sie außerdem die Zeichenfolge aus responseBodyByteArray wie folgt:

new String(ex.getResponseBodyAsByteArray())

Aber immer noch kein Glück.

Der gleiche Endpunkt funktioniert gut in Postman. Die Ruhevorlage scheint den Fehlerantwortkörper irgendwie durcheinander zu bringen.

Antworten

ArunGowda Sep 17 2020 at 14:48

Ich bin mir nicht sicher, wo genau das Problem lag. Ich habe die Restvorlage so konfiguriert, dass anstelle des von der Restvorlage verwendeten Standard-HttpUrlConnection ein Apache-HTTP-Client verwendet wird.

Dies schien gut zu funktionieren und behebt das Problem mit dem Fehlerfehler-Antworttext.

Dieses Tutorial hilft uns dabei.