Количество способов отправить http-запрос на удаленный адрес и вернуть ответ в Java + Springboot - PullRequest
1 голос
/ 04 августа 2020

У меня есть некоторые сомнения относительно возможных способов отправки запроса на удаленный адрес, а затем возврата этого ответа в Springboot с использованием языка Java. До сих пор я пытался сделать это только с помощью CloseableHttpClient и CloseableHttpResponse, выполняя вызов rest post на адрес, а затем возвращая ответ (но до сих пор я не мог правильно прочитать ответ, поскольку метод EntityUtils.getString () был генерирование исключений .. Извлечение JSON из ответа как ResponseEntityProxy {[Content-Type: application / json; charset = UTF-8, Chunked: true]} )
Может быть, у кого-нибудь есть другая идея как этого можно достичь, есть ли другие возможные способы отправки HTTP-запроса (с заголовками и телом) и чтения ответа в этих технологиях? (или, по крайней мере, в некоторых других технологиях, если это невозможно в этих ...) .
Буду очень признателен за любую помощь или предложение.

1 Ответ

0 голосов
/ 04 августа 2020

Насколько мне известно, есть два распространенных способа сделать API запросы в Spring Boot.

  1. RestTemplate
  2. WebClient

Большинство людей обычно используют RestTemplate. Но в ближайшие годы он будет упразднен. Поэтому я рекомендую вам использовать WebClient.

Ниже WebClient POST REQUEST Пример:

 @Autowired
 private WebClient.Builder webClientBuilder;


 Turnover turnover = new Turnover();
                
 Gson resp = webClientBuilder.build()
 .post()
 .uri("url")
 .contentType(MediaType.APPLICATION_JSON)
 .accept(MediaType.APPLICATION_JSON )
 .body(Mono.just(turnover),Turnover.class)
 .retrieve()
 .bodyToMono(Gson.class).block();

Turnover.java

@Getter
@Setter
public class Turnover {

    private String start_date;
    private String end_date;
    private String account;

    public Turnover(){
        setStart_date("01.01.2020");
        setEnd_date("01.06.2020");
        setAccount("20293435454");
    }
}

webClientBuilder Bean. В моем случае у меня было PROXY. Итак, я использовал URL-адрес и порт прокси.

@Bean
    public WebClient.Builder getWebClientBuilder(){

        HttpClient httpClient = HttpClient.create()
                .tcpConfiguration(tcpClient ->
                        tcpClient.proxy(proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host("url").port(portnumber)));
        ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
        return WebClient.builder().clientConnector(connector);
    }

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

И не забудьте создать Bean WebClient в вашем классе Main java. Выше я привел только пример. Вам необходимо изменить аргументы в соответствии с вашими требованиями.

...