RestTemplate.postForObjectを使用してWebサービスに情報を投稿しています。結果の文字列に加えて、応答ヘッダーの情報が必要です。これを取得する方法はありますか?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
RestTemplate.postForObjectを使用してWebサービスに情報を投稿しています。結果の文字列に加えて、応答ヘッダーの情報が必要です。これを取得する方法はありますか?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
わかりました、私はついにそれを理解しました。交換方法はまさに私が必要としているものです。完全なヘッダーを含むHttpEntityを返します。
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
最善の方法は、executeメソッドを使用して、ヘッダーにアクセスできるResponseExtractorを渡すことです。
private static class StringFromHeadersExtractor implements ResponseExtractor<String> {
public String extractData(ClientHttpResponse response) throws
{
return doSomthingWithHeader(response.getHeaders());
}
}
もう1つのオプション(クリーン度が低い)は、RestTemplateを拡張し、への呼び出しをオーバーライドして、doExecute
そこに特別なヘッダー処理ロジックを追加することです。
HttpEntity<?> entity = new HttpEntity<>( postObject, headers ); // for request
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, entity, String.class);
String result= response.getBody();
HttpHeaders headers = response.getHeaders();
これが推奨される方法かどうかはわかりませんが、カスタムを使用するようにテンプレートを構成すると、応答ヘッダーから情報を抽出できるようですHttpMessageConverter
。