Установите код состояния 301 или 303 в Spring RestTemplate и ResponseEntity - PullRequest
0 голосов
/ 12 марта 2020

Я создал сервис GET для перенаправления на веб-страницу, которая использует POST. Я пытаюсь использовать restTemplate, потому что с помощью этого я могу отправить тело и заголовок, которые запрашивают услугу, и я достиг, чтобы получить информацию, которая мне нужна от службы.

Однако мне нужно перенаправить на сервер, на котором есть служба POST, но я не смог, потому что не знаю, как установить код состояния, который я перенаправил на другой сервер.

Вот функции, которые я использую:

RequestEntity<Object> req = new RequestEntity<Object>(body, httpHeaders, HttpMethod.POST, url);

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, req, String.class);

1 Ответ

0 голосов
/ 13 марта 2020

Вы можете сделать что-то подобное, так как http-сообщение не перенаправляется автоматически весной. Поэтому может помочь следующее:

 public ResponseEntity<String> getData() {
 final RestTemplate restTemplate = new RestTemplate();
 String url = "http://localhost:8080/my-sample-post-url";
 final HttpComponentsClientHttpRequestFactory factory =
     new HttpComponentsClientHttpRequestFactory();
 final HttpClient httpClient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); //org.apache.httpcomponents 
 factory.setHttpClient(httpClient);
 restTemplate.setRequestFactory(factory);
 Map<String, String> params = new HashMap<String, String>();
 ResponseEntity<String> response = restTemplate.postForEntity(url,params,String.class);
 if(response.getStatusCode().equals(HttpStatus.OK)) {
   return new ResponseEntity<String>(HttpStatus.SEE_OTHER);
 }
 else {
    return new ResponseEntity(HttpStatus.NOT_FOUND); // for example only
 }

 }

Примечание. Реализация Lax RedirectStrategy, которая автоматически перенаправляет все запросы HEAD, GET, POST и DELETE. Эта стратегия ослабляет ограничения на автоматическое перенаправление c методов POST, налагаемые спецификацией HTTP. Подробнее здесь

...