web-dev-qa-db-ja.com

SpringRestTemplateリダイレクト302

Spring Restテンプレートを使用して、ログインのPOSTリクエストを実行しようとしています。

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

LinkedMultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
mvm.add("LoginForm_Login", "login");
mvm.add("LoginForm_Password", "password");

ResponseEntity<String> result = restTemplate.exchange(uriDWLogin, HttpMethod.POST, requestEntity, String.class);

ResponseEntityのステータスは302です。このリクエストの本文を取得できなかったため、このリクエストに従って本文の応答を取得したいと思います。

18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - StatusResponse - 302
18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - BodyResponse - 

この問題を解決するにはどうすればよいですか?!

9
Aliyon

リクエストがGETリクエストの場合、リダイレクトは自動的に実行されます( この回答 を参照)。 POSTリクエストでそれを実現するには、1つのオプションは、HttpComponentsClientHttpRequestFactoryなどの別のリクエストファクトリを使用し、HttpClientを使用するように設定することです。リダイレクトに従うために必要な設定( LaxRedirectStrategy を参照):

final RestTemplate restTemplate = new RestTemplate();
final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
final HttpClient httpClient = HttpClientBuilder.create()
                                               .setRedirectStrategy(new LaxRedirectStrategy())
                                               .build();
factory.setHttpClient(httpClient);
restTemplate.setRequestFactory(factory);

私はテストしていませんが、これはうまくいくはずです。

21
Nicolas