In Spring RestTemplate gibt es eine Möglichkeit, benutzerdefinierte Header zusammen mit einem POST - Anforderungsobjekt zu senden. Ich habe die exchange
-Methode bereits ausprobiert. Es scheint, dass wir Schlüsselwertpaare zusammen mit benutzerdefinierten Headern senden können, nicht jedoch ein an HttpEntity.
angehängtes Anforderungsobjekt. Der folgende Code veranschaulicht den Versuch und scheint 400 BadRequest
für den Server zu sein.
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> httpEntity = new HttpEntity<Object>(requestDTO, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.exchange(URL, HttpMethod.POST, httpEntity, SomeObject.class);
Wer kennt diese Situation? Oder ist es etwas, das ich nicht versuchen kann?
Ja, es ist möglich, wenn MultiValueMap-Header anstelle von HttpHeaders verwendet werden
Beispiel:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Authorization", "Basic " + base64Creds);
headers.add("Content-Type", "application/json");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpEntity<ObjectToPass> request = new HttpEntity<ObjectToPass>(objectToPassInstance, headers);
restTemplate.postForObject(urlPost, request, Boolean.class);
Boolean.class, nur weil mein Controller an diesem Endpunkt Boolean zurückgibt (kann alles sein)
Viel Glück beim Codieren!
Versuchen Sie, das vollständige Debugging des Spring-Pakets zu aktivieren. Ich bin sicher, Sie erhalten weitere Informationen zu Ihrer "400 Bad Request":
<logger name="org.springframework">
<level value="DEBUG"/>
</logger>
Versuchen Sie, dieselbe Anforderung mit beliebigen Restwerkzeugen zu senden (z. B. Rest ConsoleChrome-Plugin).
Sehen Sie sich an, was in der Debug-Konsole des Browsers passiert (Beispiel: Registerkarte "Netzwerk" für Chrome).
Diese Schritte helfen mir immer.