Warum RestTemplate Antwort ist in JSON Wann sollte werden in XML?
Kämpfte ich mit einem extrange Frühjahr Verhalten mit RestTemplate (org.springframework.web.client.RestTemplate) ohne Erfolg.
Verwende ich in meinem Loch-Anwendung folgenden code und erhalten immer eine XML-Antwort, die ich analysieren und bewerten sein Ergebnis.
String apiResponse = getRestTemplate().postForObject(url, body, String.class);
Aber kann nicht herausfinden, warum ein server eine Antwort im JSON-format nach Ausführung:
String apiResponse = getRestTemplate().getForObject(url, String.class);
Habe ich ausgetestet auf niedrigem Niveau RestTemplate und der content-type wird XML, haben aber keine Ahnung, warum das Ergebnis wird im JSON-Format.
Wenn ich den Zugriff von einem browser die Antwort ist ebenfalls in XML, sondern in apiResponse ich habe JSON.
Ich habe versucht, viele Optionen nach der Lektüre Frühling-Dokumentation
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html
Habe auch versucht zu ändern, explizit die Header aber immer noch nicht, es herauszufinden.
Ich gedebuggt Klasse RestTemplate und bemerkt, dass diese Methode ist immer application/json:
public void doWithRequest(ClientHttpRequest request) throws IOException {
if (responseType != null) {
List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();
for (HttpMessageConverter<?> messageConverter : getMessageConverters()) {
if (messageConverter.canRead(responseType, null)) {
List<MediaType> supportedMediaTypes = messageConverter.getSupportedMediaTypes();
for (MediaType supportedMediaType : supportedMediaTypes) {
if (supportedMediaType.getCharSet() != null) {
supportedMediaType =
new MediaType(supportedMediaType.getType(), supportedMediaType.getSubtype());
}
allSupportedMediaTypes.add(supportedMediaType);
}
}
}
if (!allSupportedMediaTypes.isEmpty()) {
MediaType.sortBySpecificity(allSupportedMediaTypes);
if (logger.isDebugEnabled()) {
logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
}
request.getHeaders().setAccept(allSupportedMediaTypes);
}
}
}
Könnte Ihnen eine Idee?
RestTemplate
ist low-level und einfach durchführen einer einfachen GETRC hat Recht, müssen die request-Header und Inhalt der Antwort-Typen, um dies herauszufinden. Bitte mehr Kontext für Ihr problem.
Ich habe soeben die post mit neuen Informationen. Scheint, dass die allSupportedMediaTypes ist immer mit application/json. Wenn ändern Sie es durch den debugger application/xml funktioniert es. Warum ist es passiert? By the way, wie kann ich tun, um application/xml standardmäßig?
das isse passiert, weil "allSupportedTypes" enthält, application/json und es ist Hinzugefügt setAccept. Ich brauche, um herauszufinden, warum json gesetzt ist und wie es zu ändern. Vielen Dank
siehe Antwort
InformationsquelleAutor Federico Piazza | 2014-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte ich lösen mein Problem mit RC.'s helfen. Ich poste die Antwort, anderen Menschen zu helfen.
Das problem war, dass Accept-header automatisch auf APPLICATION/JSON so musste ich den Weg, den Dienst aufzurufen, um den Accept-header, die ich möchte.
Ich dies geändert:
Zu diesem um, um die Anwendung der Arbeit:
ausgezeichnete, froh, das zu hören. Vielen Dank für die +1
Bei mir funktioniert das nicht, weil mein content-type ist application/json;UTF-8. Konnte nicht extrahiert Antwort: Nein geeignet HttpMessageConverter gefunden für eine Antwort geben ...classname... und content-type [application/json;charset=UTF-8]
InformationsquelleAutor Federico Piazza