Java+Springboot中向远程地址发送http请求和return响应的方式数
Number of ways to send http request to remote address and return response in Java+Springboot
我对向远程地址发送请求的可能方式有一些疑问,然后 return 在 Springboot 中使用 Java 语言进行响应。到目前为止,我尝试只使用 CloseableHttpClient 和 CloseableHttpResponse 来做到这一点,对地址进行 rest post 调用,然后 return 响应(但到目前为止我一直无法正确读取响应,因为方法 EntityUtils.getString() 一直在抛出异常.. Extracting JSON from response as ResponseEntityProxy{[Content-Type: application/json;charset=UTF-8,Chunked: true]} )
有没有人有其他想法如何实现,是否有其他可能的方法可以发送 HTTP 请求(使用 headers 和 body)并读取这些技术中的响应?(或至少在其他一些技术中,如果在这些技术中是不可能的..)。
如果有任何帮助或建议,我将不胜感激。
据我所知,有两种常见的方法可以在 Spring Boot
.
中发出 API
请求
- RestTemplate
- WebClient
大多数人都经常使用 RestTemplate
。但它将在未来几年被弃用。所以我建议你使用 WebClient
.
下面WebClient
POSTREQUEST例子:
@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>
并且不要忘记在 Main java class 中创建 Bean
WebClient。上面我只是举了一个例子。您需要根据您的要求更改参数。
我对向远程地址发送请求的可能方式有一些疑问,然后 return 在 Springboot 中使用 Java 语言进行响应。到目前为止,我尝试只使用 CloseableHttpClient 和 CloseableHttpResponse 来做到这一点,对地址进行 rest post 调用,然后 return 响应(但到目前为止我一直无法正确读取响应,因为方法 EntityUtils.getString() 一直在抛出异常.. Extracting JSON from response as ResponseEntityProxy{[Content-Type: application/json;charset=UTF-8,Chunked: true]} )
有没有人有其他想法如何实现,是否有其他可能的方法可以发送 HTTP 请求(使用 headers 和 body)并读取这些技术中的响应?(或至少在其他一些技术中,如果在这些技术中是不可能的..)。
如果有任何帮助或建议,我将不胜感激。
据我所知,有两种常见的方法可以在 Spring Boot
.
API
请求
- RestTemplate
- WebClient
大多数人都经常使用 RestTemplate
。但它将在未来几年被弃用。所以我建议你使用 WebClient
.
下面WebClient
POSTREQUEST例子:
@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>
并且不要忘记在 Main java class 中创建 Bean
WebClient。上面我只是举了一个例子。您需要根据您的要求更改参数。