当我们有业务需求的时候,需要判断当前时间是否为节假日有3种方式
- Jsoup 爬虫爬取 (万年日历查询 或者 360日历 百度日历)
- 自己维护一套日历数据表(成本较高)
- 调用开发 api 获取别人维护好的数据
本文采用的是3
api接口地址: timor.tech/api/holiday… 较稳定可靠
@Component
public class HolidayUtil {
@Autowired
private RestTemplateUtil restTemplateUtil;
@Autowired
private RedisUtil redisUtil;
/**
* 获取是否节假日
* @return
*/
public Sting getNowDayHoliday(){
LocalDate now = LocalDate.now();
//我们利用redis 将数据存起来
String key = RedisConstant.HOLIDAY + now;
if(redisUtil.hasKey(key)){
return redisUtil.get(key);
}else{
String url = "http://timor.tech/api/holiday/info/" + now;
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json;charset=UTF-8");
//模拟真实请求
headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
ResponseEntity<String> responseEntity = restTemplateUtil.get(url,headers, String.class);
//json转换
Map<Object, Object> map =
JsonUtil.stringToCollect(responseEntity.getBody());
if(map.get("code").equals(0)){
redisUtil.set(key,map.get("type"),86400);
return map.get("type");
}else{
return null;
}
}
}
}
RestTemplateUtil:
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public <T> ResponseEntity<T> get(String url, Map<String, String> headers, Class<T> responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return get(url, httpHeaders, responseType, uriVariables);
}
/**
* 带请求头的GET请求调用方式
*
* @param url 请求URL
* @param headers 请求头参数
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public <T> ResponseEntity<T> get(String url, HttpHeaders headers, Class<T> responseType, Object... uriVariables) {
HttpEntity<?> requestEntity = new HttpEntity<>(headers);
return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);
/**
* 通用调用方式
*
* @param url 请求URL
* @param method 请求方法类型
* @param requestEntity 请求头和请求体封装对象
* @param responseType 返回对象类型
* @param uriVariables URL中的变量,按顺序依次对应
* @return ResponseEntity 响应对象封装类
*/
public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
return restTemplate.exchange(url, method, requestEntity, responseType, uriVariables);
}
}
输出
{"code":0,"type":{"type":0,"name":"周二","week":2},"holiday":null}