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?
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!
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>
Essayez d’envoyer la même demande avec n’importe quel outil Rest (par exemple, le plugin Rest ConsoleChrome).
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.