2015-09-17 14 views
5

Mein aktueller Code:meine benutzerdefinierten HTTP-Header Spring RestTemplate Anfrage hinzufügen/verlängern RestTemplate

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

Ich brauche einige benutzerdefinierte Header für meine Bitte, in Form hinzuzufügen:

X-TP-DeviceID : <GUID> 

Was das ist einfachste Art, das in meinem Fall zu tun? Gibt es eine Möglichkeit, meinem restTemplate-Objekt eine benutzerdefinierte hader-Definition hinzuzufügen, bevor ich eine 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] So schaffte ich es zu arbeiten. Ich bin jedoch nicht ganz zufrieden damit. In meinem Fall muss ich die gleichen benutzerdefinierten Header für alle Anrufe bereitstellen, die ich mache.

Also meine nächste Frage ist - ist es möglich, meine benutzerdefinierten Header automatisch bei jedem WebService-Aufruf hinzugefügt werden? Zum Beispiel, indem Sie die RestTemplate-Klasse erweitern und alle benutzerdefinierten Header dort ablegen. Also, alles, was ich dann brauche, wäre einfach meine benutzerdefinierte erweiterte RestTemplate, anstelle von Lager eins und alle meine benutzerdefinierten Header werden dort standardmäßig vorhanden sein.

Antwort

9

Sie können benutzerdefinierte HTTP-Header mit RestTemplate-Austauschmethode wie folgt ü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. This link has several ways of calling rest service with examples

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

Sorry, es ist immer noch nicht klar für mich. Können Sie eine modifizierte Version meines Codes bereitstellen? Meinst du, ich werde Mall [] anstelle von RestRresponse haben? Was ist "Anfrage"? Sollte ich Ihr respEntity-Objekt als Parameter zum getForObject-Aufruf hinzufügen? Auch ich brauche http Methode in meinem Fall – user1209216

+0

Versuchen Sie mit dem bearbeiteten Code – kswaughs

+0

Thx, fand ich auch etwas andere Lösung, ist es auch richtig? Ich habe meine Frage aktualisiert. Btw Ich kann headers.add oder headers.set verwenden, was ist der Unterschied zwischen ihnen? – user1209216

Verwandte Themen