添加了查询天气实况的接口
This commit is contained in:
parent
6685e334ec
commit
2cebe20881
6
pom.xml
6
pom.xml
@ -29,6 +29,7 @@
|
||||
<springfox-swagger2.version>2.10.5</springfox-swagger2.version>
|
||||
<poi.version>5.0.0</poi.version>
|
||||
<poi-ooxml.version>5.0.0</poi-ooxml.version>
|
||||
<httpclient.version>4.5.2</httpclient.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
@ -177,6 +178,11 @@
|
||||
<version>2.4</version>
|
||||
<classifier>jdk15</classifier>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>${httpclient.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
@ -2,6 +2,15 @@ package com.xkrs;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
@ -13,4 +22,12 @@ public class FirePointApplication {
|
||||
SpringApplication.run(FirePointApplication.class, args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RestTemplate restTemplate() {
|
||||
//Apache Httpclient
|
||||
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
|
||||
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
|
||||
return restTemplate;
|
||||
}
|
||||
|
||||
}
|
||||
|
24
src/main/java/com/xkrs/common/config/RestConfiguration.java
Normal file
24
src/main/java/com/xkrs/common/config/RestConfiguration.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.xkrs.common.config;
|
||||
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
*/
|
||||
@Configuration
|
||||
public class RestConfiguration {
|
||||
|
||||
@Resource
|
||||
private RestTemplateBuilder restTemplateBuilder;
|
||||
|
||||
@Bean
|
||||
public RestTemplate restTemplate(){
|
||||
return restTemplateBuilder.build();
|
||||
}
|
||||
|
||||
}
|
@ -50,6 +50,7 @@ class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
.antMatchers(HttpMethod.GET,"/api/user/booleanUserName").permitAll()
|
||||
.antMatchers(HttpMethod.GET,"/websocketTest").permitAll()
|
||||
.antMatchers(HttpMethod.GET,"/selectCityName").permitAll()
|
||||
.antMatchers(HttpMethod.GET,"/weather/cityName").permitAll()
|
||||
// 所有其它请求需要身份认证
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
|
@ -0,0 +1,28 @@
|
||||
package com.xkrs.weather.controller;
|
||||
|
||||
import com.xkrs.weather.entity.WeatherResponse;
|
||||
import com.xkrs.weather.service.WeatherDataService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(value = "/weather")
|
||||
public class WeatherController {
|
||||
|
||||
@Autowired
|
||||
private WeatherDataService weatherDataService;
|
||||
|
||||
@GetMapping("/cityId")
|
||||
public WeatherResponse getWeatherByCityId(@RequestParam("cityId") String cityId){
|
||||
return weatherDataService.getDataByCityId(cityId);
|
||||
}
|
||||
|
||||
@GetMapping("/cityName")
|
||||
public WeatherResponse getWeatherByCityName(@RequestParam("cityName") String cityName){
|
||||
return weatherDataService.getDataByCityName(cityName);
|
||||
}
|
||||
|
||||
}
|
78
src/main/java/com/xkrs/weather/entity/Forecast.java
Normal file
78
src/main/java/com/xkrs/weather/entity/Forecast.java
Normal file
@ -0,0 +1,78 @@
|
||||
package com.xkrs.weather.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 未来天气
|
||||
* @author XinYi Song
|
||||
*/
|
||||
public class Forecast implements Serializable {
|
||||
|
||||
/* "forecast":[{
|
||||
"date":"23日星期天", "high":"高温 24℃", "fengli":"<![CDATA[4-5级]]>", "low":"低温 12℃", "fengxiang":"北风", "type":"晴"
|
||||
},{
|
||||
"date":"24日星期一", "high":"高温 23℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 11℃", "fengxiang":"无持续风向", "type":
|
||||
"晴"
|
||||
},{
|
||||
"date":"25日星期二", "high":"高温 23℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 13℃", "fengxiang":"南风", "type":"多云"
|
||||
},{
|
||||
"date":"26日星期三", "high":"高温 22℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 14℃", "fengxiang":"南风", "type":"多云"
|
||||
},{
|
||||
"date":"27日星期四", "high":"高温 22℃", "fengli":"<![CDATA[3-4级]]>", "low":"低温 14℃", "fengxiang":"南风", "type":"阴"
|
||||
}]*/
|
||||
|
||||
private String date;
|
||||
private String high;
|
||||
private String fengli;
|
||||
private String low;
|
||||
private String fengxiang;
|
||||
private String type;
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getHigh() {
|
||||
return high;
|
||||
}
|
||||
|
||||
public void setHigh(String high) {
|
||||
this.high = high;
|
||||
}
|
||||
|
||||
public String getFengli() {
|
||||
return fengli;
|
||||
}
|
||||
|
||||
public void setFengli(String fengli) {
|
||||
this.fengli = fengli;
|
||||
}
|
||||
|
||||
public String getLow() {
|
||||
return low;
|
||||
}
|
||||
|
||||
public void setLow(String low) {
|
||||
this.low = low;
|
||||
}
|
||||
|
||||
public String getFengxiang() {
|
||||
return fengxiang;
|
||||
}
|
||||
|
||||
public void setFengxiang(String fengxiang) {
|
||||
this.fengxiang = fengxiang;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
87
src/main/java/com/xkrs/weather/entity/Weather.java
Normal file
87
src/main/java/com/xkrs/weather/entity/Weather.java
Normal file
@ -0,0 +1,87 @@
|
||||
package com.xkrs.weather.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 天气信息
|
||||
* @author XinYi Song
|
||||
*/
|
||||
public class Weather implements Serializable {
|
||||
|
||||
/*
|
||||
http://wthrcdn.etouch.cn/weather_mini?city=北京
|
||||
{
|
||||
"data":{
|
||||
"yesterday":{
|
||||
"date":"22日星期六", "high":"高温 24℃", "fx":"西北风", "low":"低温 13℃", "fl":"<![CDATA[3-4级]]>", "type":"晴"
|
||||
},"city":"北京", "aqi":"35", "forecast":[{
|
||||
"date":"23日星期天", "high":"高温 24℃", "fengli":"<![CDATA[4-5级]]>", "low":"低温 12℃", "fengxiang":"北风", "type":"晴"
|
||||
},{
|
||||
"date":"24日星期一", "high":"高温 23℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 11℃", "fengxiang":"无持续风向", "type":
|
||||
"晴"
|
||||
},{
|
||||
"date":"25日星期二", "high":"高温 23℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 13℃", "fengxiang":"南风", "type":"多云"
|
||||
},{
|
||||
"date":"26日星期三", "high":"高温 22℃", "fengli":"<![CDATA[<3级]]>", "low":"低温 14℃", "fengxiang":"南风", "type":"多云"
|
||||
},{
|
||||
"date":"27日星期四", "high":"高温 22℃", "fengli":"<![CDATA[3-4级]]>", "low":"低温 14℃", "fengxiang":"南风", "type":"阴"
|
||||
}],"ganmao":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。", "wendu":"14"
|
||||
},"status":1000, "desc":"OK"
|
||||
}*/
|
||||
|
||||
private String city;
|
||||
private Yesterday yesterday;
|
||||
private String aqi;
|
||||
private String ganmao;
|
||||
private String wendu;
|
||||
private List<Forecast> forecast;
|
||||
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity(String city) {
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
public Yesterday getYesterday() {
|
||||
return yesterday;
|
||||
}
|
||||
|
||||
public void setYesterday(Yesterday yesterday) {
|
||||
this.yesterday = yesterday;
|
||||
}
|
||||
|
||||
public String getAqi() {
|
||||
return aqi;
|
||||
}
|
||||
|
||||
public void setAqi(String aqi) {
|
||||
this.aqi = aqi;
|
||||
}
|
||||
|
||||
public String getGanmao() {
|
||||
return ganmao;
|
||||
}
|
||||
|
||||
public void setGanmao(String ganmao) {
|
||||
this.ganmao = ganmao;
|
||||
}
|
||||
|
||||
public String getWendu() {
|
||||
return wendu;
|
||||
}
|
||||
|
||||
public void setWendu(String wendu) {
|
||||
this.wendu = wendu;
|
||||
}
|
||||
|
||||
public List<Forecast> getForecast() {
|
||||
return forecast;
|
||||
}
|
||||
|
||||
public void setForecast(List<Forecast> forecast) {
|
||||
this.forecast = forecast;
|
||||
}
|
||||
}
|
55
src/main/java/com/xkrs/weather/entity/WeatherResponse.java
Normal file
55
src/main/java/com/xkrs/weather/entity/WeatherResponse.java
Normal file
@ -0,0 +1,55 @@
|
||||
package com.xkrs.weather.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
*/
|
||||
public class WeatherResponse implements Serializable {
|
||||
private static final long serialVersionUID = -8483256225271502962L;
|
||||
private Weather data;
|
||||
private Integer status;
|
||||
private String desc;
|
||||
|
||||
public WeatherResponse() {
|
||||
}
|
||||
|
||||
public WeatherResponse(Weather data, Integer status, String desc) {
|
||||
this.data = data;
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public Weather getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(Weather data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Integer getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Integer status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WeatherResponse{" +
|
||||
"data=" + data +
|
||||
", status=" + status +
|
||||
", desc='" + desc + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
68
src/main/java/com/xkrs/weather/entity/Yesterday.java
Normal file
68
src/main/java/com/xkrs/weather/entity/Yesterday.java
Normal file
@ -0,0 +1,68 @@
|
||||
package com.xkrs.weather.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 昨日天气
|
||||
* @author XinYi Song
|
||||
*/
|
||||
public class Yesterday implements Serializable {
|
||||
/* "yesterday":{
|
||||
"date":"22日星期六", "high":"高温 24℃", "fx":"西北风", "low":"低温 13℃", "fl":"<![CDATA[3-4级]]>", "type":"晴"
|
||||
},*/
|
||||
|
||||
private String date;
|
||||
private String high;
|
||||
private String fx;
|
||||
private String low;
|
||||
private String fl;
|
||||
private String type;
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getHigh() {
|
||||
return high;
|
||||
}
|
||||
|
||||
public void setHigh(String high) {
|
||||
this.high = high;
|
||||
}
|
||||
|
||||
public String getFx() {
|
||||
return fx;
|
||||
}
|
||||
|
||||
public void setFx(String fx) {
|
||||
this.fx = fx;
|
||||
}
|
||||
|
||||
public String getLow() {
|
||||
return low;
|
||||
}
|
||||
|
||||
public void setLow(String low) {
|
||||
this.low = low;
|
||||
}
|
||||
|
||||
public String getFl() {
|
||||
return fl;
|
||||
}
|
||||
|
||||
public void setFl(String fl) {
|
||||
this.fl = fl;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.xkrs.weather.service;
|
||||
|
||||
import com.xkrs.weather.entity.WeatherResponse;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
*/
|
||||
public interface WeatherDataService {
|
||||
|
||||
/**
|
||||
* 根据城市ID查询天气数据
|
||||
* @param CityId
|
||||
* @return
|
||||
*/
|
||||
WeatherResponse getDataByCityId(String CityId);
|
||||
|
||||
/**
|
||||
* 根据城市名称查询天气数据
|
||||
* @param cityName
|
||||
* @return
|
||||
*/
|
||||
WeatherResponse getDataByCityName(String cityName);
|
||||
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package com.xkrs.weather.service.impl;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.xkrs.weather.entity.WeatherResponse;
|
||||
import com.xkrs.weather.service.WeatherDataService;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author XinYi Song
|
||||
*/
|
||||
@Service
|
||||
public class WeatherDataServiceImpl implements WeatherDataService {
|
||||
|
||||
private static final String WEATHER_URI = "http://wthrcdn.etouch.cn/weather_mini?";
|
||||
|
||||
@Resource
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@Override
|
||||
public WeatherResponse getDataByCityId(String cityId) {
|
||||
String uri = WEATHER_URI + "citykey=" + cityId;
|
||||
return this.getWeatherResponse(uri);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public WeatherResponse getDataByCityName(String cityName) {
|
||||
String uri = WEATHER_URI + "city=" + cityName;
|
||||
return this.getWeatherResponse(uri);
|
||||
}
|
||||
|
||||
|
||||
private WeatherResponse getWeatherResponse(String uri) {
|
||||
ResponseEntity<String> respString = restTemplate.getForEntity(uri, String.class);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
WeatherResponse resp = null;
|
||||
String strBody = null;
|
||||
if (respString.getStatusCodeValue() == 200) {
|
||||
strBody = respString.getBody();
|
||||
}
|
||||
try {
|
||||
resp = objectMapper.readValue(strBody, WeatherResponse.class);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return resp;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user