RestTemplate restTemplate = new RestTemplate();
final MappingJackson2XmlHttpMessageConverter converter = new MappingJackson2XmlHttpMessageConverter();
final List<MediaType> supportedMediaTypes = new LinkedList<MediaType>(converter.getSupportedMediaTypes());
supportedMediaTypes.add(MediaType.ALL);
converter.setSupportedMediaTypes(supportedMediaTypes);
restTemplate.getMessageConverters().add(converter);
ResponseEntity<MyDTO[]> response = restTemplate.getForEntity(urlBase, MyDTO[].class);
HttpHeaders headers = response.getHeaders();
URI location = headers.getLocation(); // Has my redirect URI
response.getBody(); //Always null
302が自動的に追跡されるという印象を受けました。この仮定は間違っていますか?この場所を選択して再リクエストする必要がありますか?
SimpleClientHttpRequestFactory であるデフォルトのClientHttpRequestFactory
実装を使用する-デフォルトの動作は、ロケーションヘッダーのURLに従うことです(ステータスコード3xx
)-ただし、最初のリクエストがGET
requestの場合のみ。
詳細はこのクラスで見つけることができます-次のメソッドを検索します:
protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
...
if ("GET".equals(httpMethod)) {
connection.setInstanceFollowRedirects(true);
}
ここで、関連するドキュメントコメントHttpURLConnection.setInstanceFollowRedirects
方法:
この{@code HttpURLConnection}インスタンスがHTTPリダイレクト(応答コード3xxの要求)の後に自動的に続くかどうかを設定します。
デフォルト値はfollowRedirectsから取得され、デフォルトはtrueです。
CommonsClientHttpRequestFactory (下で HttpClient v を使用)を使用する場合、 postProcessCommonsHttpMethod メソッドをオーバーライドして、リダイレクトに従うように設定できます。
public class FollowRedirectsCommonsClientHttpRequestFactory extends CommonsClientHttpRequestFactory {
@Override
protected void postProcessCommonsHttpMethod(HttpMethodBase httpMethod) {
httpMethod.setFollowRedirects(true);
}
}
次に、このように(オプションの、場合によっては事前構成されたHttpClientインスタンスを使用して)使用し、応答でlocation
ヘッダーに従います。
RestTemplate restTemplate = new RestTemplate(
new FollowRedirectsCommonsClientHttpRequestFactory());
あるプロトコルから別のプロトコルにリダイレクトしようとしていますか? httpからhttps、またはその逆?その場合、自動リダイレクトは機能しません。このコメントを参照してください: RLConnectionはリダイレクトに従いません
Javaネットワーキングエンジニアの間で議論した後、あるプロトコルから別のプロトコルへのリダイレクト(httpからhttpsへ、またはその逆など)を自動的に追跡するべきではないと考えられます。結果
from https://bugs.Java.com/bugdatabase/view_bug.do?bug_id=4620571
それ以外の場合、RestTemplate
コードをデバッグすると、デフォルトでHttpURLConnection
がgetInstanceFollowRedirects() == true
で適切に設定されていることがわかります。