Spring Rest Template Müllfehler Antwort Körper
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
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.