2015-09-17 16 views
5

私の現在のコード:/拡張RestTemplate

X-TP-DeviceID : <GUID> 

何です:私は形で、私の要求のためにいくつかのカスタムヘッダーを追加する必要が

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

私の場合、これを行う最も簡単な方法は?サーバーにリクエストを送信する前にrestTemplateオブジェクトにカスタムハザーズ定義を追加する方法はありますか?

[編集]

それは正しいですか?

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

[追加] 私はそれが動作するように管理しました。しかし、私はそれに完全に満足していません。私の場合、私が作るすべての呼び出しに対して同じカスタムヘッダーを提供する必要があります。

だから、私の次の質問はある - それは、各websesrviceコールに自動的に追加されるように私のカスタムヘッダーを設定することは可能でしょうか?たとえば、RestTemplateクラスを拡張してそこにすべてのカスタムヘッダーを配置します。だから、私は単に私のカスタムを使用することになるその後、必要なものすべてではなく株式一つで、RestTemplateを拡張し、すべての私のカスタムヘッダーは、デフォルトではそこに存在することになります。

答えて

9

あなたは以下のようにRestTemplate交換法でカスタムHTTPヘッダーを渡すことができます。

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

編集:以下は更新されたコードです。 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

申し訳ありませんが、それはまだ私にとっては明らかです。私のコードの修正版を提供できますか?あなたはRestRresponseの代わりにMall []を持っていることを意味しますか? 「要求」とは何ですか? resForEntityオブジェクトをgetForObject呼び出しのパラメータとして追加する必要がありますか?また、私は、httpメソッドが私の場合には – user1209216

+0

は、編集されたコード – kswaughs

+0

Thxをしてみます、私はまた、わずかに異なる解決策を見つけ、それはあまりにも正しいのですか?必要私は私の質問を更新しました。 Btw私はheaders.addまたはheaders.setを使用することができます、それらの違いは何ですか? – user1209216