Java获取当前是否节假日

在这里插入图片描述

当我们有业务需求的时候,需要判断当前时间是否为节假日有3种方式

  1. Jsoup 爬虫爬取 (万年日历查询 或者 360日历 百度日历)
  2. 自己维护一套日历数据表(成本较高)
  3. 调用开发 api 获取别人维护好的数据


本文采用的是3

api接口地址: http://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 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 responseEntity = restTemplateUtil.get(url,headers, String.class);
            //json转换
            Map 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  ResponseEntity get(String url, Map headers, Class 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  ResponseEntity get(String url, HttpHeaders headers, Class 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  ResponseEntity exchange(String url, HttpMethod method, HttpEntity requestEntity, Class responseType, Object... uriVariables) {
        return restTemplate.exchange(url, method, requestEntity, responseType, uriVariables);
    }
    }

输出

{"code":0,"type":{"type":0,"name":"周二","week":2},"holiday":null}

你可能感兴趣的:(Java获取当前是否节假日)