diff --git a/pom.xml b/pom.xml index 007bdca..b284715 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ 2.10.5 5.0.0 5.0.0 + 4.5.2 @@ -177,6 +178,11 @@ 2.4 jdk15 + + org.apache.httpcomponents + httpclient + ${httpclient.version} + diff --git a/src/main/java/com/xkrs/FirePointApplication.java b/src/main/java/com/xkrs/FirePointApplication.java index 8de176b..4e2f1cd 100644 --- a/src/main/java/com/xkrs/FirePointApplication.java +++ b/src/main/java/com/xkrs/FirePointApplication.java @@ -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; + } + } diff --git a/src/main/java/com/xkrs/common/config/RestConfiguration.java b/src/main/java/com/xkrs/common/config/RestConfiguration.java new file mode 100644 index 0000000..ce45f96 --- /dev/null +++ b/src/main/java/com/xkrs/common/config/RestConfiguration.java @@ -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(); + } + +} diff --git a/src/main/java/com/xkrs/common/config/WebSecurityConfig.java b/src/main/java/com/xkrs/common/config/WebSecurityConfig.java index 614429c..6f4958e 100644 --- a/src/main/java/com/xkrs/common/config/WebSecurityConfig.java +++ b/src/main/java/com/xkrs/common/config/WebSecurityConfig.java @@ -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() diff --git a/src/main/java/com/xkrs/weather/controller/WeatherController.java b/src/main/java/com/xkrs/weather/controller/WeatherController.java new file mode 100644 index 0000000..01e40c1 --- /dev/null +++ b/src/main/java/com/xkrs/weather/controller/WeatherController.java @@ -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); + } + +} diff --git a/src/main/java/com/xkrs/weather/entity/Forecast.java b/src/main/java/com/xkrs/weather/entity/Forecast.java new file mode 100644 index 0000000..6587ea0 --- /dev/null +++ b/src/main/java/com/xkrs/weather/entity/Forecast.java @@ -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":"", "low":"低温 12℃", "fengxiang":"北风", "type":"晴" + },{ + "date":"24日星期一", "high":"高温 23℃", "fengli":"", "low":"低温 11℃", "fengxiang":"无持续风向", "type": + "晴" + },{ + "date":"25日星期二", "high":"高温 23℃", "fengli":"", "low":"低温 13℃", "fengxiang":"南风", "type":"多云" + },{ + "date":"26日星期三", "high":"高温 22℃", "fengli":"", "low":"低温 14℃", "fengxiang":"南风", "type":"多云" + },{ + "date":"27日星期四", "high":"高温 22℃", "fengli":"", "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; + } +} diff --git a/src/main/java/com/xkrs/weather/entity/Weather.java b/src/main/java/com/xkrs/weather/entity/Weather.java new file mode 100644 index 0000000..55923ef --- /dev/null +++ b/src/main/java/com/xkrs/weather/entity/Weather.java @@ -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":"", "type":"晴" + },"city":"北京", "aqi":"35", "forecast":[{ + "date":"23日星期天", "high":"高温 24℃", "fengli":"", "low":"低温 12℃", "fengxiang":"北风", "type":"晴" + },{ + "date":"24日星期一", "high":"高温 23℃", "fengli":"", "low":"低温 11℃", "fengxiang":"无持续风向", "type": + "晴" + },{ + "date":"25日星期二", "high":"高温 23℃", "fengli":"", "low":"低温 13℃", "fengxiang":"南风", "type":"多云" + },{ + "date":"26日星期三", "high":"高温 22℃", "fengli":"", "low":"低温 14℃", "fengxiang":"南风", "type":"多云" + },{ + "date":"27日星期四", "high":"高温 22℃", "fengli":"", "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; + + 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 getForecast() { + return forecast; + } + + public void setForecast(List forecast) { + this.forecast = forecast; + } +} diff --git a/src/main/java/com/xkrs/weather/entity/WeatherResponse.java b/src/main/java/com/xkrs/weather/entity/WeatherResponse.java new file mode 100644 index 0000000..84a16ad --- /dev/null +++ b/src/main/java/com/xkrs/weather/entity/WeatherResponse.java @@ -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 + '\'' + + '}'; + } +} diff --git a/src/main/java/com/xkrs/weather/entity/Yesterday.java b/src/main/java/com/xkrs/weather/entity/Yesterday.java new file mode 100644 index 0000000..472ba98 --- /dev/null +++ b/src/main/java/com/xkrs/weather/entity/Yesterday.java @@ -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":"", "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; + } +} diff --git a/src/main/java/com/xkrs/weather/service/WeatherDataService.java b/src/main/java/com/xkrs/weather/service/WeatherDataService.java new file mode 100644 index 0000000..8c382dd --- /dev/null +++ b/src/main/java/com/xkrs/weather/service/WeatherDataService.java @@ -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); + +} diff --git a/src/main/java/com/xkrs/weather/service/impl/WeatherDataServiceImpl.java b/src/main/java/com/xkrs/weather/service/impl/WeatherDataServiceImpl.java new file mode 100644 index 0000000..40ee22e --- /dev/null +++ b/src/main/java/com/xkrs/weather/service/impl/WeatherDataServiceImpl.java @@ -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 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; + } + +}