Resttemplate GET-Anforderung mit benutzerdefiniertem Header
Brauche ich zum senden einer GET-Anforderung mit einem header: Content-Type: application/camiant-msr-v2.0+xml
. Ich erwarte eine XML-Antwort vom server. Getestet habe ich die Anforderung und die Antwort mit dem Briefträger und alles ist gut. Aber wenn ich versuche, es zu tun im Frühjahr mit RestTemplate
, habe ich immer einen 400 bad request. Die Ausnahmen von spring
sind:
Jul 09, 2016 12:53:38 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/smp] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)
Mein code:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/camiant-msr-v2.0+xml");
HttpEntity<?> entity = new HttpEntity<Object>(headers);
log.debug("request headers: " + entity.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(queryUrl, HttpMethod.GET, entity, String.class);
Den debug-Meldung zeigt den header als {Content-Type=[application/camiant-msr-v2.0+xml]}
, die korrekt zu sein scheint. Ich Frage mich, was ist falsch mit meiner Anfrage und wenn es einen Weg gibt, um zu sehen, die Anfragen an den Draht zu Debuggen.
Wenn Sie das senden einer GET -, warum sind Sie ein
Weil der server erwartet, dass nur durch die Bereitstellung, dass header, bekomme ich eine XML-Antwort.
Ich ein bisschen verstehen, was du meinst, aber die API-Spezifikation besagt, dass, und auch Postboten gut funktioniert.
tatsächlich, ändern Sie ihn auf
Content-Type
header? Wollen Sie es zu sein Accept
statt?Weil der server erwartet, dass nur durch die Bereitstellung, dass header, bekomme ich eine XML-Antwort.
Ich ein bisschen verstehen, was du meinst, aber die API-Spezifikation besagt, dass, und auch Postboten gut funktioniert.
tatsächlich, ändern Sie ihn auf
Accept
für mich gearbeitet! Ich denke, es ist, weil der Java-Bibliothek verhindert unregelmäßigen verwendet, wie set Content-Type
in einer GET-Anforderung. Vielen Dank!InformationsquelleAutor J Freebird | 2016-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgendes bei mir funktioniert:
InformationsquelleAutor Pramod Alagambhat
Den möglichen Interpretationen
400
sind der content-Typ ist nicht akzeptabel für eine Anfrage oder url nicht übereinstimmt.Aus meiner persönlichen Erfahrung, ich habe ein starkes Gefühl, Sie werden vermasselt die
queryUrl
so um die Feinabstimmung Dinge hier würde ich dir empfehlen die Verwendung von SpringUriComponentsBuilder
Klasse.Bitte lassen Sie mich wissen, wenn es funktioniert immer noch nicht.
InformationsquelleAutor Mudassar
Eigentlich der header übergeben werden, benannt werden sollten
Accept
eher alsContent-Type
, da es sich um eine GET-Methode. Aber die server-API-doc irgendwie sagt, es erwartetContent-Type
, und die API von der Befehl-Linie/Briefträger funktionierte gut auf beideContent-Type
undAccept
. Ich denke, es ist die Java-Bibliothek, die verhindert, dassContent-Type
- header übergeben werden, um GET-Anfragen.InformationsquelleAutor J Freebird