web-dev-qa-db-ja.com

Spring RestTemplateリクエストにカスタムHTTPヘッダーを追加/ RestTemplateを拡張

私の現在のコード:

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

次の形式で、リクエストにカスタムヘッダーを追加する必要があります。

X-TP-DeviceID : <GUID>

私の場合、これを行う最も簡単な方法は何ですか?サーバーにリクエストを送信する前に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();

[追加]

だから、私はそれを機能させることができた。しかし、私はそれに完全に満足していません。私の場合、私が行うすべての呼び出しに同じカスタムヘッダーを提供する必要があります。

それで、私の次の質問は-RestTemplateクラスを拡張してそこにすべてのカスタムヘッダーを配置するなど、各web-service呼び出しでカスタムヘッダーを自動的に追加するように設定することは可能ですか?次に、必要なのは、ストックの代わりにカスタム拡張RestTemplateを使用するだけで、デフォルトですべてのカスタムヘッダーがそこに表示されます。

20
user1209216

以下のように、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);

編集:以下は更新されたコードです。 このリンクには、例を使用してレストサービスを呼び出す方法がいくつかあります

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

「User-Agent」ヘッダーをリクエストに追加します。

サーバーの中には、スパイダープログラムやスクレイパーがサーバーにアクセスするのをブロックしようとするものもあります。これは、以前はリクエストがユーザーエージェントヘッダーを送信しなかったためです。

カスタムユーザーエージェントの値を設定するか、「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());
0
Sean Gildea