基于Spring Boot的天气预报服务
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
本文,我们将基于 Spring Boot 技术来实现一个微服务天气预报服务接口——micro-weather-basic。micro-weather-basic 的作用是实现简单的天气预报功能,可以根据不同的城市,查询该城市的实时天气情况。
开发环境
- Gradle 4.0
- Spring Boot 1.5.6
- Apache HttpClient 1.5.3
数据来源
理论上,天气的数据是天气预报的实现基础。本应用与实际的天气数据无关,理论上,可以兼容多种数据来源。但为求简单,我们在网上找了一个免费、可用的天气数据接口。
- 天气数据来源为中华万年历。例如:
- 通过城市名字获得天气数据 :http://wthrcdn.etouch.cn/weather_mini?city=深圳
- 通过城市id获得天气数据:http://wthrcdn.etouch.cn/weather_mini?citykey=101280601
- 城市ID列表。每个城市都有一个唯一的ID作为标识。见 http://cj.weather.com.cn/support/Detail.aspx?id=51837fba1b35fe0f8411b6df 或者 http://mobile.weather.com.cn/js/citylist.xml。
调用天气服务接口示例,我们以“深圳”城市为例,可用看到如下天气数据返回。
我们通过观察数据,来了解每个返回字段的含义。
- “city”: 城市名称
- “aqi”: 空气指数,
- “wendu”: 实时温度
- “date”: 日期,包含未来5天
- “high”:最高温度
- “low”: 最低温度
- “fengli”: 风力
- “fengxiang”: 风向
- “type”: 天气类型
以上数据,是我们需要的天气数据的核心数据,但是,同时也要关注下面两个字段:
- “status”: 接口调用的返回状态,返回值“1000”,意味着数据是接口正常
- “desc”: 接口状态的描述,“OK”代表接口正常
重点关注返回值不是“1000”的情况,说明,这个接口调用异常了。
初始化一个 Spring Boot 项目
初始化一个 Spring Boot 项目 micro-weather-basic
,该项目可以直接在我们之前章节课程中的 basic-gradle 项目基础进行修改。同时,为了优化项目的构建速度,我们对Maven中央仓库地址和 Gradle Wrapper 地址做了调整。其中细节暂且不表,读者可以自行参阅源码,或者学习笔者所著的《Spring Boot 教程》(https://github.com/waylau/spring-boot-tutorial)。其原理,我也整理到我的博客中了:
- https://waylau.com/change-gradle-wrapper-distribution-url-to-local-file/
- https://waylau.com/use-maven-mirrors/
项目配置
添加 Apache HttpClient 的依赖,来作为我们Web请求的客户端。
创建天气信息相关的值对象
创建com.waylau.spring.cloud.vo
包,用于相关值对象。创建天气信息类 Weather
昨日天气信息:
未来天气信息:
WeatherResponse 作为整个消息的返回对象
服务接口及实现
定义了获取服务的两个接口方法
其实现为:
返回的天气信息采用了 Jackson 来进行反序列化成为 WeatherResponse 对象。
控制器层
控制器层暴露了RESTful API 地址。
@RestController
自动会将返回的数据,序列化成 JSON数据格式。
配置类
RestConfiguration 是 RestTemplate 的配置类。
访问API
运行项目之后,访问项目的 API :
- http://localhost:8080/weather/cityId/101280601
- http://localhost:8080/weather/cityName/惠州
能看到如下的数据返回
源码
本章节的源码,见 https://github.com/waylau/spring-cloud-tutorial/ samples
目录下的micro-weather-basic
。
参考引用
- https://waylau.com/spring-boot-weather-report/
- https://github.com/waylau/spring-boot-tutorial