gpt4 book ai didi

java - 如何在 java 中使用构造函数基初始化来初始化 WebClient?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:43:24 26 4
gpt4 key购买 nike

我试图从 WebClient 替换 RestTemplate,因为根据 Java Doc,RestTemplate 将被弃用。 Spring 团队建议尽可能使用 WebClient。

之前使用RestTempalte的代码如下

public Map<String,String> getInfo()
{
HttpHeaders headers = new HttpHeaders();
headers.set( ACCEPT, MediaType.APPLICATION_JSON_VALUE );
HttpEntity<?> entity = new HttpEntity<>( headers );
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl( this.endpoint + VERSION_INFO_PATH );

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<CPResponse> response = restTemplate.exchange(
builder.toUriString(),
HttpMethod.GET,
entity,
CPResponse.class );


List<Object> resultList = response.getBody().getResults();

if( response.getBody().getResults() != null && !( resultList )
.isEmpty() )
{

return ( ( LinkedHashMap ) resultList.get( 0 ) );
}
else
{
throw new CrawlerRuntimeExceptions( "Invalid response from API" );
}

}

我想从 WebClient 中替换 RestTemplate。所以我按如下方式实现 WebClientConnection 类

public class WebClientConnection
{
private WebClient webClient;


public WebClientConnection( String baseUrl )
{
this.webClient = WebClient.create( baseUrl );

}

public Mono<CPResponse> get( String url )
{
return webClient.get().uri( "/{url}",url ).retrieve().bodyToMono( CPResponse.class );
}

public Flux<CPResponse> getAll( String url )
{
return webClient.get().uri( "/{url}",url ).retrieve().bodyToFlux( CPResponse.class );
}

public Mono<CPResponse> post( String url, HttpEntity entity )
{
return webClient.post().uri( "/{url}",url ).retrieve().bodyToMono( CPResponse.class );
}
}

我使用这个依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>>2.1.3.RELEASE</version>
</dependency>
public void getInfo()
{
WebClientConnection webClientConnection = new WebClientConnection( endpoint );
Mono<CPResponse> response = webClientConnection.get( VERSION_INFO_PATH );
}

创建webclient时出现stackOverflow错误

public WebClientConnection( String baseUrl )
{
this.webClient = WebClient.create( baseUrl );

}

如何正确地进行从 RestTemplate 到 WebClient 的迁移?

最佳答案

实际上,StackOverflow 异常 javadoc :

Thrown when a stack overflow occurs because an application recurses too deeply.

(很好的解释 here )

就其本身而言,创建 WebClient 不包含此类递归。也许您正在某处(隐式地)使用递归?

堆栈跟踪可以帮助找出问题所在。

关于java - 如何在 java 中使用构造函数基初始化来初始化 WebClient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com