Java+Springboot中向远程地址发送http请求并返回响应的方法数



我对将请求发送到远程地址,然后使用Java语言在Springboot中返回响应的可能方法有一些疑问。到目前为止,我只尝试使用CloseableHttpClient和CloseableHttpResponse,对地址进行rest post调用,然后返回响应(但到目前为止我还无法正确读取响应,因为方法EntityUtils.getString((一直在抛出异常。。从响应中提取JSON作为ResponseEntityProxy{[Content Type:application/JSON;charset=UTF-8,Chunked:true]}(
有人知道如何实现这一点吗?在这些技术中,有没有其他可能的方法可以发送HTTP请求(带标头和正文(并读取响应?(或者至少在其他一些技术中,如果在这些技术中不可能的话(。
我非常感谢任何形式的帮助或建议。

据我所知,在Spring Boot中生成API请求有两种常见的方法。

  1. RestTemplate
  2. WebClient

现在大多数人都常用RestTemplate。但在未来的几年里,它将被弃用。因此,我建议您使用WebClient

下面的WebClientPOST 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>

不要忘记在Mainjava类中创建WebClient的Bean。上面我只举了一个例子。您需要根据自己的需求更改参数。