Mon code actuel:
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Mall[] malls = restTemplate.getForObject(url, Mall[].class);
J'ai besoin d'ajouter des en-têtes personnalisés pour ma demande, sous la forme:
X-TP-DeviceID : <GUID>
Quel est le moyen le plus simple de le faire dans mon cas? Existe-t-il un moyen d'ajouter une définition d'en-tête personnalisée à mon objet restTemplate
avant d'envoyer la demande au serveur?
[modifier]
Est-ce correct?
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.set("X-TP-DeviceID", "1234567890");
HttpEntity entity = new HttpEntity(headers);
HttpEntity<Mall[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, Mall[].class);
Mall[] malls = response.getBody();
[ajoutée]
Donc, j'ai réussi à le faire fonctionner. Cependant, je ne suis pas entièrement satisfait de cela. Dans mon cas, il me faudra fournir les mêmes en-têtes personnalisés pour tous les appels que je passe.
Ma prochaine question est donc la suivante: est-il possible de définir automatiquement les en-têtes personnalisés à ajouter à chaque appel web-service
, par exemple en étendant la classe RestTemplate
et en y mettant tous les en-têtes personnalisés? Ensuite, tout ce que je devrais faire serait simplement d’utiliser ma variable RestTemplate
personnalisée au lieu de celle stock, et tous mes en-têtes personnalisés y seraient présents par défaut.
Vous pouvez transmettre des en-têtes http personnalisés avec la méthode d’échange RestTemplate comme indiqué ci-dessous.
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("X-TP-DeviceID", "your value");
HttpEntity<RestRequest> entityReq = new HttpEntity<RestRequest>(request, headers);
RestTemplate template = new RestTemplate();
ResponseEntity<RestResponse> respEntity = template
.exchange("RestSvcUrl", HttpMethod.POST, entityReq, RestResponse.class);
EDIT: Ci-dessous le code mis à jour. Ce lien propose plusieurs moyens d'appeler le service repos avec des exemples
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("X-TP-DeviceID", "your value");
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
ResponseEntity<Mall[]> respEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Mall[].class);
Mall[] resp = respEntity.getBody();
Ajoutez un en-tête "User-Agent" à votre demande.
Certains serveurs tentent d'empêcher les programmes spidering et les scrapers d'accéder à leur serveur car auparavant, les demandes n'envoyaient pas d'en-tête d'agent d'utilisateur.
Vous pouvez essayer de définir une valeur d'agent utilisateur personnalisée ou utiliser une valeur identifiant un navigateur tel que "Mozilla/5.0 Firefox/26.0".
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("user-agent", "Mozilla/5.0 Firefox/26.0");
headers.set("user-key", "your-password-123"); // optional - in case you auth in headers
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
ResponseEntity<Game[]> respEntity = restTemplate.exchange(url, HttpMethod.GET, entity, Game[].class);
logger.info(respEntity.toString());