it-swarm.com.de

Fügen Sie meinen benutzerdefinierten http-Header zu Spring RestTemplate hinzu, und erweitern Sie RestTemplate

Mein aktueller Code:

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Mall[] malls = restTemplate.getForObject(url, Mall[].class);

Ich muss einige benutzerdefinierte Kopfzeilen für meine Anfrage hinzufügen:

X-TP-DeviceID : <GUID>

Was ist der einfachste Weg, dies in meinem Fall zu tun? Gibt es eine Möglichkeit, meinem restTemplate-Objekt eine benutzerdefinierte Kopfdefinition hinzuzufügen, bevor ich die Anfrage an den Server sende?

[bearbeiten]

Ist es richtig?

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

[hinzugefügt]

Also habe ich es geschafft, es zum Laufen zu bringen. Damit bin ich jedoch nicht ganz zufrieden. In meinem Fall muss ich für alle Anrufe, die ich tätige, die gleichen benutzerdefinierten Header angeben. 

Meine nächste Frage ist also: Kann ich meine benutzerdefinierten Header so einstellen, dass sie bei jedem web-service-Aufruf automatisch hinzugefügt werden, beispielsweise durch Erweitern der Klasse RestTemplate und Hinzufügen aller benutzerdefinierten Header dort? Alles, was ich tun müsste, wäre, einfach meine benutzerdefinierte erweiterte RestTemplate anstelle der Standardvariable zu verwenden, und alle meine benutzerdefinierten Header werden standardmäßig dort angezeigt.

16
user1209216

Sie können benutzerdefinierte HTTP-Header mit der RestTemplate-Austauschmethode wie unten übergeben.

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

BEARBEITEN: Unten ist der aktualisierte Code. Dieser Link hat mehrere Möglichkeiten, den Rest-Service mit Beispielen aufzurufen

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();
22
kswaughs

Fügen Sie Ihrer Anfrage einen "User-Agent" -Header hinzu. 

Einige Server versuchen, Spidering-Programme und Scraper vom Zugriff auf ihren Server abzuhalten, da Anforderungen in früheren Tagen keinen Header eines Benutzeragenten gesendet haben. 

Sie können entweder versuchen, einen benutzerdefinierten Benutzeragentenwert festzulegen, oder einen Wert verwenden, der einen Browser wie "Mozilla/5.0 Firefox/26.0" identifiziert.

    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());
0
Sean Gildea