Faire authentifié requêtes POST avec le Printemps RestTemplate pour Android
J'ai une API RESTful j'essaie de connecter via Android et RestTemplate. Toutes les requêtes à l'API sont authentifiés à l'aide de l'Authentification HTTP, à travers la mise les en-têtes de la HttpEntity et puis, à l'aide de RestTemplate de exchange()
méthode.
Toutes les requêtes GET de l'excellent travail de cette façon, mais je ne peux pas trouver comment accomplir authentifié requêtes POST. postForObject
et postForEntity
poignée de Postes, mais n'ont pas de moyen simple de définir les en-têtes d'Authentification.
Donc pour l'Obtient, cela fonctionne très bien:
HttpAuthentication httpAuthentication = new HttpBasicAuthentication("username", "password");
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAuthorization(httpAuthentication);
HttpEntity<?> httpEntity = new HttpEntity<Object>(requestHeaders);
MyModel[] models = restTemplate.exchange("/api/url", HttpMethod.GET, httpEntity, MyModel[].class);
Mais les Messages ne semblent pas travailler avec exchange()
qu'il n'envoie jamais de la mesure des en-têtes et je ne vois pas comment mettre le corps de la requête à l'aide de exchange()
.
Quelle est la meilleure façon de faire authentifié POST demandes de RestTemplate?
- requestHeaders.setAuthorization(httpAuthentication).. son undefined..pas de méthode comme setAuthorization..
Vous devez vous connecter pour publier un commentaire.
Ok trouvé la réponse.
exchange()
est le meilleur moyen. Bizarrement leHttpEntity
de classe n'ont pas desetBody()
méthode (il agetBody()
), mais il est toujours possible de définir le corps de la requête, via le constructeur.MyModel myModel = restTemplate.exchange(completeServiceUrl, HttpMethod.GET, request, MyModel.class).getBody()
aidera à résoudre le problème que vous avez mentionnéApproche légèrement différente:
J'ai récemment été confronté à un problème lorsque j'essayais d'obtenir passé l'authentification lors d'un appel RESTE de l'île de Java, et bien que les réponses à ce fil (et les autres threads) a aidé, il y avait encore un peu d'essais et d'erreurs impliquées dans l'obtention de ce travail.
Ce qui a fonctionné pour moi a été l'encodage des informations d'identification dans
Base64
et en les ajoutant comme la Base de l'Autorisation d'en-têtes. J'ai ensuite ajouté uneHttpEntity
àrestTemplate.postForEntity
, ce qui m'a donné la réponse que j'ai besoin.Voici la classe que j'ai écrit pour cet intégral (extension de RestTemplate):
Très utile
J'ai eu un peu différente scénario où je le demande xml a été lui-même le corps de la POSTE et pas un param. Pour que le code suivant peut être utilisé - Poster une réponse juste au cas où quelqu'un d'autre ayant la même question en bénéficieront.