项目场景:

需要知道某一天是不是节假日,或者是休息日。


问题描述

我们知道每年的假节日要等国家规定好,我们才能知道,所以自己是算不出的。

马上想到的两个解决方法:

1.通过调用互联网的节假日API(优点:方便,缺点:主动权在别人手里,万一别人的服务器出了问题,自己的服务也会受影响)

2.每年自己手动配置一次(优点:安全不会出问题,缺点:麻烦)

感觉都不是很完美,最后把这两种结合一下,生成的解决方案:

每年年底定时去调用互联网的节假日API,做个异常捕捉,如果同步失败,证明这个接口可能出了问题,然后再去手动配置。后面再去排查接口的问题,如果是接口已经停用了,那么再换另一个节假日API的接口,重新调整。所以最好选个比较稳定的第三方接口。

我这边用的是RollToolsApi官网:https://www.mxnzp.com/


解决方案:

节假日接口:https://www.mxnzp.com/doc/detail?id=1

关键代码:我这里只是打印了日期,没有入库,大家可以入库保存,其中app_id和app_secret需要在官网创建,是免费的。

package com.test.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import com.test.dto.Holiday;
import com.test.dto.HolidayData;
import com.test.dto.HolidayResult;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;@RestController
@RequestMapping("/day")
@Api(value = "节假日")
public class TestController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "getDay", method = RequestMethod.GET)@ApiOperation(value = "测试")public String getDay() {/** 互联网节假日api接口,公安网需要主动导入配置* www.mxnzp.com* ignoreHoliday: 是否忽略节假日,仅仅获取万年历,默认值false*/String url = "https://www.mxnzp.com/api/holiday/list/year/2022"+ "?ignoreHoliday=false&app_id=登录官网创建&app_secret=登录官网创建";HolidayResult result = restTemplate.getForObject(url, HolidayResult.class);if(result.getCode() != null && result.getCode() == 1){//成功: code: 状态码 1.返回成功 0.返回失败if(!CollectionUtils.isEmpty(result.getData())){for (HolidayData data : result.getData()) {System.out.println("月份: "+data.getMonth());for (Holiday day : data.getDays()) {System.out.println(day.getDate()+"\t"+day.getType()+"\t"+day.getTypeDes());}System.out.println("\n");}}}else{//失败}return result.getMsg();}@RequestMapping(value = "importDay", method = RequestMethod.POST)@ApiOperation(value = "测试导入")public String importDay(@RequestBody HolidayResult result) {if(result == null){return "不能为空";}if(result.getCode() != null && result.getCode() == 1){//成功: code: 状态码 1.返回成功 0.返回失败if(!CollectionUtils.isEmpty(result.getData())){for (HolidayData data : result.getData()) {System.out.println("月份: "+data.getMonth());for (Holiday day : data.getDays()) {System.out.println(day.getDate()+"\t"+day.getType()+"\t"+day.getTypeDes());}System.out.println("\n");}}}else{//失败}return result.getMsg();}}

实体类用于接收响应结果

HolidayResult

package com.test.dto;import java.util.List;import lombok.Data;@Data
public class HolidayResult {private Integer code;   //状态码 1.返回成功 0.返回失败private String msg;  //提示信息private List<HolidayData> data;
}

HolidayData

package com.test.dto;import java.util.List;import lombok.Data;@Data
public class HolidayData {private Integer month;    //当前月份private Integer year; //当前年份private List<Holiday> days;
}

Holiday

package com.test.dto;import lombok.Data;@Data
public class Holiday {private String date;  //当前日期private Integer weekDay;  //当前周第几天 1-周一 2-周二 ... 7-周日private String yearTips; //天干地支纪年法描述 例如:戊戌private Integer type;   //类型 0 工作日 1 休息日 2 节假日 如果ignoreHoliday参数为true,这个字段不返回private String typeDes; //类型描述 比如 国庆,休息日,工作日 如果ignoreHoliday参数为true,这个字段不返回private String chineseZodiac; //属相 例如:狗private String solarTerms;  //节气描述 例如:小雪private String avoid;    //不宜事项private String lunarCalendar; //农历日期private String suit;  //宜事项private Integer dayOfYear; //这一年的第几天private Integer weekOfYear;    //这一年的第几周private String constellation;  //星座private Integer indexWorkDayOfMonth;    //如果当前是工作日 则返回是当前月的第几个工作日,否则返回0 如果ignoreHoliday参数为true,这个字段不返回
}

我这里手动配置是采用json参数的方式,大家可以改为导入文件的方式。

源码:https://download.csdn.net/download/u011974797/86513910

Spring Boot获取节假日API相关推荐

  1. spring boot开发接口api

    spring boot开发接口api ​ 在上一次教了大家怎么去搭建一个自己的后端模板之后,现在和大家分享讨论一下如何开发RestfulApi接口. 首先开发api之前要考虑到后端是需要写api文档的 ...

  2. 转:Spring Boot 获取 HttpServletRequest 的方法

    转自: Spring Boot 获取 HttpServletRequest 的方法 - 简书本文介绍 Spring Boot 2 获取 HttpServletRequest 的方法. 目录 概述 方法 ...

  3. Spring boot 获取本机的IP地址mac地址以及电脑名称!

    Spring boot 获取本机的IP地址mac地址以及电脑名称! package com.example.demo;import java.net.InetAddress;import java.n ...

  4. spring boot 获取cookie信息

    spring boot 获取cookie信息 先创建一个cookie @RequestMapping(value = "/setCookies",method = RequestM ...

  5. Spring Boot 通过Restful API,在PostMan 中返回数据

    Spring Boot 通过Restful API,在PostMan 中返回数据 资源组 新增 POST/resource_group/ad 请求体:格式:from-data参数:groupName= ...

  6. 如何使用MySQL和JPA使用Spring Boot构建Rest API

    Hi Everyone! For the past year, I have been learning JavaScript for full-stack web development. For ...

  7. Spring Boot与RESTful API

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Sprin ...

  8. Spring Boot 之 RESRful API 权限控制

    一.为何用RESTful API 1.1 RESTful是什么? RESTful(Representational State Transfer)架构风格,是一个Web自身的架构风格,底层主要基于HT ...

  9. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  10. Web笔记-session盗用安全问题(Spring Boot获取所有session及提高安全性)

    此处本人的过滤代码如下: 仅仅是判断了这个session有没有被记录,有没有attribute! 某些IT论坛,就是这样的,通过session,就可以进行批量帐号操作,发取http协议. 这里演示如下 ...

最新文章

  1. 第四届蓝桥杯省赛javaB组试题解析
  2. 抢劫(01背包+对立事件)
  3. 征文通知 | 第十八届中国计算语言学大会(CCL 2019)论文提交截止时间推迟
  4. 生产者消费者的实际使用
  5. java 并发编程视频教程_全面深入学习java并发编程,视频教程下载
  6. pandas基础(part3)--描述性统计
  7. 在局域网访问_局域网访问共享文件需要密码怎么办?取消访问密码的方法
  8. java中多线程 - 多线程中的基本方法
  9. 2018年海南计算机职称考试,海南省2018年全国计算机等级考试报名时间
  10. 训练日志 2019.4.14
  11. mysql部署window设置分片_window配置 mysql 详细步骤
  12. centos下的mysql安装
  13. html常用代码大全_电子元器件知识资料大全
  14. Hilbert 变换与瞬时频率
  15. 恶意软件清理助手 1.76
  16. 暑期旅游超十亿人次,张家界成为大黑马,挤掉三亚西安排全国第三
  17. xss.haozi.me弹窗练习0x00-0x10
  18. 固态硬盘跟机械硬盘的区别
  19. #java读书笔记#基础知识
  20. 【SwiftUI学习笔记】Git Repository Creation FailedEnsure the author information supplied in Xcode ...

热门文章

  1. ThinkPad如何禁用触摸板
  2. LaTeX 中的数学字体
  3. [C#][原创]Magick.NET使用时一些弱点简介
  4. 分数加减法—两个分数的加减法
  5. PS计算机字体Q,PS q萌字体教程
  6. android设置自动亮度,Android设置屏幕亮度
  7. Docker镜像加速
  8. Android Camera动态人脸识别+人脸检测基于OpenCV(无需OpenCVManager)
  9. 求职招聘小程序 毕业设计毕业论文 开题报告和效果图参考(基于微信小程序毕业设计题目选题课题)
  10. HTML+CSS导航栏及下拉菜单的实现