web-dev-qa-db-ja.com

RestTemplateから応答ヘッダーを読み取るにはどうすればよいですか?

RestTemplate.postForObjectを使用してWebサービスに情報を投稿しています。結果文字列に加えて、応答ヘッダーの情報が必要です。これを取得する方法はありますか?

RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
31
Eric Milas

さて、私はついにそれを理解しました。交換方法はまさに私が必要とするものです。完全なヘッダーを含むHttpEntityを返します。

RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);

String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
52
Eric Milas

execute メソッドを使用し、ヘッダーにアクセスできる ResponseExtractor を渡すことをお勧めします。

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

    public String extractData(ClientHttpResponse response) throws   
    {
        return doSomthingWithHeader(response.getHeaders());
    }
}

別のオプション(あまりクリーンではない)は、RestTemplateを拡張し、doExecuteへの呼び出しをオーバーライドし、そこに特別なヘッダー処理ロジックを追加することです。

8
Andrew White

これが推奨される方法であるかどうかはわかりませんが、カスタム HttpMessageConverter を使用するようにテンプレートを構成すると、応答ヘッダーから情報を抽出できるように見えます。

1
Stephen C
  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();
0
Deepak