web-dev-qa-db-fra.com

Printemps RestTemplate à POST request avec en-têtes personnalisés et un objet request

Dans Spring, RestTemplate permet d'envoyer des en-têtes personnalisés avec un objet de requête POST. J'ai déjà essayé la méthode exchange qui est disponible. Il semble que nous puissions envoyer des paires clé-valeur avec un en-tête personnalisé, mais pas un objet de requête lui-même attaché au HttpEntity.. Le code suivant illustre la tentative et semble correspondre à 400 BadRequest pour le serveur. 

    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);

Quelqu'un au courant de cette situation? Ou est-ce quelque chose qui n'est pas possible que je cherche à faire?

16
MCF

Oui, c'est possible, si vous utilisez des en-têtes MultiValueMap au lieu de HttpHeaders

Exemple:

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 simplement parce que mon contrôleur renvoie un booléen sur ce noeud final (peut être n'importe quoi)

Bonne chance avec le codage!

66
Andrey
  1. Essayez d'activer le débogage complet du paquet Spring. Je suis sûr que vous obtiendrez plus d'informations sur votre "400 requêtes incorrectes":

    <logger name="org.springframework">
        <level value="DEBUG"/>
    </logger>
    
  2. Essayez d’envoyer la même demande avec n’importe quel outil Rest (par exemple, le plugin Rest ConsoleChrome).

  3. Voir ce qui se passe sur la console de débogage du navigateur (onglet "Réseau" pour Chrome, à titre d'exemple).

Ces étapes m'aident toujours.

0
vvelikodny

Si vous utilisez HttpClient 3.x, activez la journalisation en suivant this . Si vous utilisez HttpClient 4.x, activez la journalisation en suivant this . Cela devrait vous dire ce qui est envoyé sur le réseau et constituer un bon point de départ pour le débogage.

0
Emerson Farrugia