복붙노트

[SPRING] Spring RestTemplate 리디렉션 302

SPRING

Spring RestTemplate 리디렉션 302

나는 봄 레스트 템플릿을 사용하여 로그인 요청을 게시하려고하고있다.

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 - 

이 문제를 해결하기 위해 무엇을 할 수 있습니까?

해결법

  1. ==============================

    1.리디렉션은 요청이 GET 요청 인 경우 자동으로 수행됩니다 (이 응답 참조). POST 요청에서 발생 시키려면 HttpComponentsClientHttpRequestFactory와 같은 다른 요청 팩토리를 사용하고 리디렉션을 따르는 데 필요한 설정이있는 HttpClient를 사용하도록 설정하는 것이 좋습니다 (LaxRedirectStrategy 참조).

    리디렉션은 요청이 GET 요청 인 경우 자동으로 수행됩니다 (이 응답 참조). POST 요청에서 발생 시키려면 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);
    

    나는 테스트하지 않았지만 이것이 효과가있다.

  2. from https://stackoverflow.com/questions/32392634/spring-resttemplate-redirect-302 by cc-by-sa and MIT license