java的rest异步调用_java - Springboot:如何使用WebClient代替RestTemplate来执行非阻塞和异步调用 - 堆栈内存溢出...

我有一个使用Springboot Resttemplate的springboot项目。 我们已经从1.5.3迁移到springboot 2.0.1,我们正在尝试使用WebClient使其其余的调用异步。 我们曾经使用Resttemplate处理接收到的字符串,如下所示。 但是WebClient仅以Mono或Flux返回数据。 我怎样才能以String形式获取数据。 已经尝试过block()方法,但是它执行异步调用。

@Retryable(maxAttempts = 4, value = java.net.ConnectException.class,

backoff = @Backoff(delay = 3000, multiplier = 2))

public Mono getResponse(String url) {

return webClient.get().uri(urlForCurrent).accept(APPLICATION_JSON)

.retrieve()

.bodyToMono(String.class);

}

使用RestTemplate呈现数据流

控制器收到客户呼叫

提供程序以String格式获取数据

提供者处理字符串

数据提供给控制器

Controller.java

@RequestMapping(value = traffic/, method = RequestMethod.GET,

produces = MediaType.APPLICATION_JSON_VALUE)

public String getTraffic(@RequestParam("place") String location) throws InterruptedException, ExecutionException {

String trafficJSON = Provider.getTrafficJSON(location)

return trafficJSON;

}

Provider.java

public String getTrafficJSON(String location) {

String url = ----;

ResponseEntity response = dataFetcher.getResponse(url);

/// RESPONSEBODY IS READ AS STRING AND IT NEEDS TO BE PROCESSED

if (null != response {

return parser.transformJSON(response.getBody(), params);

}

return null;

}

DataFetcher.java

@Retryable(maxAttempts = 4,

value = java.net.ConnectException.class,

backoff = @Backoff(delay = 3000, multiplier = 2))

public ResponseEntity getResponse(String url) {

/* ----------------------- */

return getRestTemplate().getForEntity(urlForCurrent, String.class);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值