RestTemplate vs CloseableHttpClient - разница в ответах - PullRequest
0 голосов
/ 04 сентября 2018

Использование RestTemplate дает мне другой ответ по сравнению с использованием CloseableHttpClient, даже после того, как я установил CloseableHttpClient в качестве httpClient в фабрике запросов.

Использование CloseableHttpClient

CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/login/request.do");

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", "abc@abc,com"));
params.add(new BasicNameValuePair("password", "abc123"));
params.add(new BasicNameValuePair("checkSum", "12343223ew42345rweawfdsfd"));
params.add(new BasicNameValuePair("action", "signin"));
params.add(new BasicNameValuePair("dojo.preventCache", "12342353425"));
httpPost.setEntity(new UrlEncodedFormEntity(params));

CloseableHttpResponse response = client.execute(httpPost);
if (200 == response.getStatusLine().getStatusCode()) {
        String data = EntityUtils.toString(response.getEntity());
        System.out.println(data);
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(data);
        JsonNode name = root.path("secureToken");
        secureToken = name.asText();
}
client.close();

Использование RestTemplate

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

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("email", "abc@abc.com");
map.add("password", "abc123");
map.add("checkSum", "12343223ew42345rweawfdsfd");
map.add("action", "signin");
map.add("dojo.preventCache", "12342353425");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://localhost:8080/login/request.do", request, String.class);
if(responseEntity.getStatusCode().is2xxSuccessful())
    {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(responseEntity.getBody());
        JsonNode name = root.path("secureToken");
        secureToken = name.asText();
    }

Я получаю код ответа 200, когда я использую CloseableHttpClient, тогда как я получаю 302, когда я использую RestTemplate.

Если я установлю RedirectStrategy на LaxRedirectStrategy, он вернет мне код состояния 200, но ответ отличается от того, что я получаю от CloseableHttpClient. Я получаю ответ об окончательном пользовательском интерфейсе, который отображается при входе в систему и не дает мне токен.

...