我对将请求发送到远程地址,然后使用Java语言在Springboot中返回响应的可能方法有一些疑问。到目前为止,我只尝试使用CloseableHttpClient和CloseableHttpResponse,对地址进行rest post调用,然后返回响应(但到目前为止我还无法正确读取响应,因为方法EntityUtils.getString((一直在抛出异常。。从响应中提取JSON作为ResponseEntityProxy{[Content Type:application/JSON;charset=UTF-8,Chunked:true]}(
有人知道如何实现这一点吗?在这些技术中,有没有其他可能的方法可以发送HTTP请求(带标头和正文(并读取响应?(或者至少在其他一些技术中,如果在这些技术中不可能的话(。
我非常感谢任何形式的帮助或建议。
据我所知,在Spring Boot
中生成API
请求有两种常见的方法。
- RestTemplate
- 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>
不要忘记在Mainjava类中创建WebClient的Bean
。上面我只举了一个例子。您需要根据自己的需求更改参数。