wake-up-neo.com

Frühling RestTemplate an POST Anforderung mit benutzerdefinierten Kopfzeilen und einem Anforderungsobjekt

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?

16
MCF

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!

66
Andrey
  1. 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>
    
  2. Versuchen Sie, dieselbe Anforderung mit beliebigen Restwerkzeugen zu senden (z. B. Rest ConsoleChrome-Plugin).

  3. Sehen Sie sich an, was in der Debug-Konsole des Browsers passiert (Beispiel: Registerkarte "Netzwerk" für Chrome).

Diese Schritte helfen mir immer.

0
vvelikodny

Wenn Sie HttpClient 3.x verwenden, aktivieren Sie die Protokollierung, indem Sie this folgen. Wenn Sie HttpClient 4.x verwenden, aktivieren Sie die Protokollierung, indem Sie this folgen. Das sollte Ihnen sagen, was über den Draht geschickt wird, und ein guter Ausgangspunkt für das Debugging sein.

0