我正在使用Spring WebFlux WebClient从外部API检索数据,如下所示:
public WeatherWebClient() {
this.weatherWebClient = WebClient.create("http://api.openweathermap.org/data/2.5/weather");
}
public Mono<String> getWeatherByCityName(String cityName) {
return weatherWebClient
.get()
.uri(uriBuilder -> uriBuilder
.queryParam("q", cityName)
.queryParam("units", "metric")
.queryParam("appid", API_KEY)
.build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(String.class);
}
这很好,并产生如下响应:
{
"coord":{
"lon":-47.06,
"lat":-22.91
},
"weather":[
{
"id":800,
"main":"Clear",
"description":"clear sky",
"icon":"01d"
}
],
"base":"stations",
"main":{
"temp":16,
"pressure":1020,
"humidity":67,
"temp_min":16,
"temp_max":16
},
"visibility":10000,
"wind":{
"speed":1,
"deg":90
},
"clouds":{
"all":0
},
"dt":1527937200,
"sys":{
"type":1,
"id":4521,
"message":0.0038,
"country":"BR",
"sunrise":1527932532,
"sunset":1527971422
},
"id":3467865,
"name":"Campinas",
"cod":200
}
但我只对“temp”属性感兴趣(主要-
我知道第一件事是用“.exchange()”替换“.retrieve()”,但我不知道如何使它工作。
PS:这是我的第一个问题。如果我做错了什么,或者你需要更多细节,请告诉我。
谢啦!
您需要创建一个与服务器发送的响应相对应的类型。一个非常小的示例可能是这样的:
@JsonIgnoreProperties(ignoreUnknown = true)
public class WeatherResponse {
public MainWeatherData main;
}
主天气数据类可以是:
@JsonIgnoreProperties(ignoreUnknown = true)
public class MainWeatherData {
public String temp;
}
最后,您可以在bodyToMono中使用WeatherResponse:
...
.retrieve()
.bodyToMono(WeatherResponse.class);
@JsonIgnoreProperties(忽略未知=真实)
注释指示Jackson在遇到JSON字符串中不存在于POJO中的任何值时不要给出任何错误。
您可以使用链接的map
运算符访问WeatherSecurity
对象:
getWeatherByCityName(cityName)
.map(weatherResponse -> weatherResponse.main.temp)
问题内容: 最近几天,我一直在与Numpy和matplotlib一起玩。我在尝试使matplotlib绘制函数而不阻止执行时遇到问题。我知道这里已经有很多线程在问类似的问题,并且我已经在Google上搜索了很多,但是没有设法使这项工作有效。 我曾尝试按照某些人的建议使用show(block = False),但是我得到的只是一个冻结的窗口。如果我简单地调用show(),则将正确绘制结果,但执行将被
在过去的几天里,我一直在玩Numpy和matplotlib。我有问题试图使matplotlib图函数不阻塞执行。我知道已经有很多线程在SO上问类似的问题,我已经谷歌了很多,但还没有成功。 我尝试过使用show(block=False),就像一些人建议的那样,但我得到的只是一个冻结的窗口。如果我简单地调用show(),结果会被正确绘制,但执行会被阻止,直到窗口关闭。从我读过的其他线程中,我怀疑sho
主要内容:1 ConcurrentLinkedQueue的概述,2 ConcurrentLinkedQueue的实现,2.1 基本结构,2.2 构造器,2.3 入队操作,2.4 出队操作,2.5 过程详解,2.6 获取操作,2.7 其他操作,3 ConcurrentLinkedQueue的总结基于JDK1.8详细介绍了ConcurrentLinkedQueue的底层源码实现,包括同步原理、入队操作、出队操作、获取操作等。 1 ConcurrentLinkedQueue的概述 public cla
问题内容: 有没有一种干净的方法可以以Java异步,非阻塞的方式(例如,状态机,而不是1个查询= 1个线程)来解析DNS查询(通过主机名获取IP)-我想同时运行数万个查询,但是不能运行数万个线程)? 到目前为止,我发现了什么: 标准实现正在阻塞,并且看起来标准Java库缺少任何非阻塞实现。 批量解决DNS问题也讨论了类似的问题,但是找到的唯一解决方案是多线程方法(即,一个线程在每个给定的时间段内仅
非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 ServletInputStream.setReadListener 或ServletOutputStream.setWriteListener 方法时将抛出IllegalStateException。为了支持在 Ser
Web 容器中的非阻塞请求处理有助于提高对改善 Web 容器可扩展性不断增加的需求,增加 Web 容器可同时处理请求的连接数量。servlet 容器的非阻塞 IO 允许开发人员在数据可用时读取数据或在数据可写时写数据。非阻塞 IO 仅对在 Servlet 和 Filter(2.3.3.3节定义的,“异步处理”)中的异步请求处理和升级处理(2.3.3.5节定义的,“升级处理”)有效。否则,当调用 S