1、yaml
# 空气质量请求key
airqualityconfig:
airqualityKey: 你自己的key
2、URL工具类
package com.kunya.kbd.platform.airquality.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Project: 河北坤亚科技
* Author: Java-zhouqichao
* Tel:17600689790
* Description:空气质量请求
*/
public class UrlUtils {
/**
* 获取url网址返回的数据内容
*
* @param urlStr
* @return
*/
public static String loadURL(String urlStr) {
try {
URL url = new URL(urlStr);
HttpURLConnection urlConnection =
(HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
String responseStr = ConvertToString(inputStream);
return responseStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
3、创建返回前端的DTO
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* Project: 河北坤亚科技
* Author: Java-zhouqichao
* Tel:17600689790
* Description:空气质量请求
*/
@NoArgsConstructor
@Data
public class AirQualityDTO implements Serializable {
@JsonProperty("resultcode")
private String resultcode;
@JsonProperty("reason")
private String reason;
@JsonProperty("error_code")
private Integer errorCode;
@JsonProperty("result")
private List<ResultDTO> result;
@NoArgsConstructor
@Data
public static class ResultDTO implements Serializable {
@JsonProperty("citynow")
private CitynowDTO citynow;
@JsonProperty("lastTwoWeeks")
private LastTwoWeeksDTO lastTwoWeeks;
@JsonProperty("lastMoniData")
private LastMoniDataDTO lastMoniData;
@NoArgsConstructor
@Data
public static class CitynowDTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class LastTwoWeeksDTO implements Serializable {
@JsonProperty("1")
private _$1DTO $1;
@JsonProperty("2")
private _$2DTO $2;
@JsonProperty("3")
private _$3DTO $3;
@JsonProperty("4")
private _$4DTO $4;
@JsonProperty("5")
private _$5DTO $5;
@JsonProperty("6")
private _$6DTO $6;
@JsonProperty("7")
private _$7DTO $7;
@JsonProperty("8")
private _$8DTO $8;
@JsonProperty("9")
private _$9DTO $9;
@JsonProperty("10")
private _$10DTO $10;
@JsonProperty("11")
private _$11DTO $11;
@JsonProperty("12")
private _$12DTO $12;
@JsonProperty("13")
private _$13DTO $13;
@JsonProperty("14")
private _$14DTO $14;
@JsonProperty("15")
private _$15DTO $15;
@JsonProperty("16")
private _$16DTO $16;
@JsonProperty("17")
private _$17DTO $17;
@NoArgsConstructor
@Data
public static class _$1DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$2DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$3DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$4DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$5DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$6DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$7DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$8DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$9DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$10DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$11DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$12DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$13DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$14DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$15DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$16DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
@NoArgsConstructor
@Data
public static class _$17DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("date")
private String date;
}
}
@NoArgsConstructor
@Data
public static class LastMoniDataDTO implements Serializable {
@JsonProperty("1")
private _$1DTO $1;
@JsonProperty("2")
private _$2DTO $2;
@JsonProperty("3")
private _$3DTO $3;
@JsonProperty("4")
private _$4DTO $4;
@JsonProperty("5")
private _$5DTO $5;
@JsonProperty("6")
private _$6DTO $6;
@JsonProperty("7")
private _$7DTO $7;
@NoArgsConstructor
@Data
public static class _$1DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour286;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day127;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$2DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour222;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day16;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$3DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour315;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day104;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$4DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour10;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day123;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$5DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour290;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day2;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$6DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour290;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day30;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
@NoArgsConstructor
@Data
public static class _$7DTO implements Serializable {
@JsonProperty("city")
private String city;
@JsonProperty("AQI")
private String aqi;
@JsonProperty("quality")
private String quality;
@JsonProperty("PM2.5Hour")
private String _$PM25Hour279;// FIXME check this code
@JsonProperty("PM2.5Day")
private String _$PM25Day143;// FIXME check this code
@JsonProperty("PM10Hour")
private String pM10Hour;
@JsonProperty("lat")
private String lat;
@JsonProperty("lon")
private String lon;
}
}
}
}
4、Service
import com.alibaba.fastjson.JSON;
import com.kunya.kbd.common.utils.MapUtil;
import com.kunya.kbd.platform.Constants;
import com.kunya.kbd.platform.airquality.util.UrlUtils;
import com.kunya.kbd.platform.airquality.vo.AirQualityVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
/**
* Project: 河北坤亚科技
* Author: Java-zhouqichao
* Tel:17600689790
* Description:空气质量请求
*/
@Slf4j
@Service
public class AirQualityService {
@Autowired
private RedisTemplate redisTemplate;
@Value("${airqualityconfig.airqualityKey}")
private String airqualityKey;
public Map<String, Object> reqAirQuality(String cityName) throws UnsupportedEncodingException {
StringBuilder requestUrl = new StringBuilder("http://web.juhe.cn/environment/air/cityair?");
requestUrl.append("city=" + URLEncoder.encode(cityName,"utf-8"));
requestUrl.append("&key=" + airqualityKey);
String responseUrl = UrlUtils.loadURL(requestUrl.toString());
AirQualityVO airQualityVO = JSON.parseObject(responseUrl, AirQualityVO.class);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("responseUrl",responseUrl);
resultMap.put("airQualityVO",airQualityVO);
redisUtil.hmset(redisKey, resultMap, Constants.AirQuality_EXPIRE_SECOND);// 常量自定,不提供
return resultMap;
}
}
5、Controller
package com.kunya.kbd.platform.airquality.controller;
import com.kunya.kbd.common.exception.BusinessRuntimeException;
import com.kunya.kbd.common.http.HttpResult;
import com.kunya.kbd.platform.airquality.service.AirQualityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* Project: 河北坤亚科技
* Author: Java-zhouqichao
* Tel:17600689790
* Description:空气质量请求
*/
@Slf4j
@RestController
@RequestMapping(value = "airQuality")
@Api(tags = "第三方天气和空气请求接口")
public class AirQualityController {
@Autowired
private AirQualityService airQualityService;
@ApiOperation(value = "空气质量接口")
@GetMapping("/reqAirQuality")
public HttpResult reqAirQuality(@RequestParam("cityName") String cityName){
try {
Map<String,Object> result = airQualityService.reqAirQuality(cityName);
return HttpResult.success("请求空气质量接口成功", result);
} catch (BusinessRuntimeException e) {
log.error(e.getMessage());
return HttpResult.error(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
return HttpResult.error("请求空气质量接口失败");
}
}
}