工具分享--避免重复造轮子(一)

简介: 开源工具类库,建议收藏,小标题都带有官网链接

feilong-core 让Java开发更简便的工具包

Maven 配置
image.png

com.feilong.core 包
全能校验小帮手 — Validator
常用时间间隔 —TimeInterval
常用时间模式 — DatePattern
常用数字模式 - NumberPattern
字母常量 -- Alphabet
字符编码常量 - CharsetType
uri字符常量 - URIComponents
UncheckedIOException
com.feilong.core.date 包
小巧实用日期处理 - DateUtil
日期扩展 - DateExtensionUtil
com.feilong.core.util 包
集合处理利器 - CollectionsUtil
Map处理利器 - MapUtil
排序专家 - SortUtil
统计专家 - AggregateUtil
正则表达式工具类 - RegexUtil
随机数工具 - RandomUtil
com.feilong.core.lang 包
对象工具 - ObjectUtil
线程助手 - ThreadUtil
com.feilong.core.net 包
参数解析能手 - ParamUtil
com.feilong.core.bean 包
全能类型转换器 - ConvertUtil
BeanUtil
PropertyUtil

Hutool-Java 工具类库

● hutool-aop JDK 动态代理封装,提供非 IOC 下的切面支持
● hutool-bloomFilter 布隆过滤,提供一些 Hash 算法的布隆过滤
● hutool-cache 缓存
● hutool-core 核心,包括 Bean 操作、日期、各种 Util 等
● hutool-cron 定时任务模块,提供类 Crontab 表达式的定时任务
● hutool-crypto 加密解密模块
● hutool-db JDBC 封装后的数据操作,基于 ActiveRecord 思想
● hutool-dfa 基于 DFA 模型的多关键字查找
● hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
● hutool-http 基于 HttpUrlConnection 的 Http 客户端封装
● hutool-log 自动识别日志实现的日志门面
● hutool-script 脚本执行封装,例如 Javascript
● hutool-setting 功能更强大的 Setting 配置文件和 Properties 封装
● hutool-system 系统参数调用封装(JVM 信息等)
● hutool-json JSON 实现
● hutool-captcha 图片验证码实现

http客户端框架retrofit-spring-boot-starter

gitee:https://gitee.com/lianjiatech/retrofit-spring-boot-starter
maven引入:

<dependency>
    <groupId>com.github.lianjiatech</groupId>
    <artifactId>retrofit-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
  • 自定义注入OkHttpClient
  • 注解式拦截器
  • 连接池管理
  • 日志打印
  • 请求重试
  • 错误解码器
  • 全局拦截器
  • 熔断降级
  • 微服务之间的HTTP调用
  • 调用适配器
  • 数据转换器

支付best-pay-sdk

支持微信支付、支付宝等多种,以微信为例:

所需参数
image.png

导入依赖

<groupId>cn.springboot</groupId>
<artifactId>best-pay-sdk</artifactId>
<version>1.3.0.BETA</version>

配置
WechatAccountConfig.java

@Data
@ConfigurationProperties(prefix = "wechat")
@Component
public class WechatAccountConfig {
    /**
     * 公众账号appid
     * 获取地址 https://mp.weixin.qq.com
     */
    private String mpAppId;
​
    //公众号秘钥
    private String appSecret;
​
    /**
     * 商户号
     * 获取地址 https://pay.weixin.qq.com
     */
    private String mchId;
​
    /**
     * 商户密钥
     */
    private String mchKey;
​
    /**
     * 商户证书路径
     */
    private String keyPath;
​
    /**
     * 微信支付异步通知地址
     */
    private String notifyUrl;
}

PayConfig.java

@Configuration
public class PayConfig {
​
    @Autowired
    private WechatAccountConfig accountConfig;
​
​
    @Bean
    public WxPayConfig wxPayConfig() {
        WxPayConfig wxPayConfig = new WxPayConfig();
        wxPayConfig.setAppId(accountConfig.getMpAppId());
        wxPayConfig.setAppSecret(accountConfig.getAppSecret());
        wxPayConfig.setMchId(accountConfig.getMchId());
        wxPayConfig.setMchKey(accountConfig.getMchKey());
        wxPayConfig.setKeyPath(accountConfig.getKeyPath());
        wxPayConfig.setNotifyUrl(accountConfig.getNotifyUrl());
        return wxPayConfig;
    }
​
​
    @Bean
    public BestPayServiceImpl bestPayService(WxPayConfig wxPayConfig) {
        BestPayServiceImpl bestPayService = new BestPayServiceImpl();
        bestPayService.setWxPayConfig(wxPayConfig);
        return bestPayService;
    }
}

发起支付
这里有个openid项目一开始便获取到的,因为项目也做了微信授权登录,所以在那边先获取到了openid存进了数据库,这里需要便取出。

如果有需要的话,可以后面写如何获取openid的

@Autowired
 private BestPayServiceImpl bestPayService;  
​
 /**
  * 微信支付接口
  */
 @GetMapping("/pay")
 @ResponseBody
 public Result pay(@ApiParam(value = "订单号") @RequestParam("orderNo") String orderNo) {
     //支付请求参数
     PayRequest request = new PayRequest();
     //中间的参数为自己根据项目需求来获取
     
     request.setPayTypeEnum(BestPayTypeEnum.WXPAY_MP);
     request.setOrderId(orderNo);
     request.setOrderName("微信公众账号支付订单");
     request.setOrderAmount(0.01);
     request.setOpenid("openid_xxxxxx");
     
     log.info("【发起支付】request={}", JsonUtil.toJson(request));
​
     PayResponse payResponse = bestPayService.pay(request);
     log.info("【发起支付】response={}", JsonUtil.toJson(payResponse));
     return ResultGenerator.genSuccessResult(payResponse);
 }

支付成功回调

/**
   * 异步回调
   */
  @PostMapping(value = "/notify")
  public Result notify(@RequestBody String notifyData) {
      log.info("【异步通知】支付平台的数据request={}", notifyData);
      PayResponse response = bestPayService.asyncNotify(notifyData);
      log.info("【异步通知】处理后的数据data={}", JsonUtil.toJson(response));
​
      String orderNo = response.getOrderId();
      //支付方式--微信支付
      int payType = 2;
​
      //返回成功信息给支付平台,否则会不停的异步通知
      if (response.getPayPlatformEnum() == BestPayPlatformEnum.WX) {
          String payResult = orderService.paySuccess(orderNo, payType);
          if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {
              return ResultGenerator.genSuccessResult();
          } else {
              return ResultGenerator.genFailResult(payResult);
          }
      }
      throw new RuntimeException("错误的支付平台");
  }

easypoi导入导出excel

POI 工具类,Excel的快速导入导出,Excel模板导出,Word模板导出,可以仅仅5行代码就可以完成Excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试

目录
相关文章
|
存储 固态存储 算法
第五章:OB Server的存储引擎
第五章:OB Server的存储引擎
733 0
|
安全 Java easyexcel
【二十七】springboot实现多线程事务处理
【二十七】springboot实现多线程事务处理
1161 0
|
API Android开发 数据安全/隐私保护
Android 开发之 QQ变声功能实现
Android 开发之 QQ变声功能实现
1109 0
Android 开发之 QQ变声功能实现
|
7月前
|
存储 人工智能 JSON
构建AI智能体:十九、优化 RAG 检索精度:深入解析 RAG 中的五种高级切片策略
本文详细介绍了RAG(检索增强生成)系统中的文本切片策略。RAG切片是将长文档分割为语义完整的小块,以便AI模型高效检索和使用知识。文章分析了五种切片方法:改进固定长度切片(平衡效率与语义)、语义切片(基于嵌入相似度)、LLM语义切片(利用大模型智能分割)、层次切片(多粒度结构)和滑动窗口切片(高重叠上下文)。作者建议根据文档类型和需求选择策略,如通用文档用固定切片,长文档用层次切片,高精度场景用语义切片。切片质量直接影响RAG系统的检索效果和生成答案的准确性。
1515 11
|
10月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
机器学习/深度学习 数据采集 自然语言处理
基于Python的情感分析与情绪识别技术深度解析
本文探讨了基于Python的情感分析与情绪识别技术,涵盖基础概念、实现方法及工业应用。文中区分了情感分析与情绪识别的核心差异,阐述了从词典法到深度学习的技术演进,并通过具体代码展示了Transformers架构在细粒度情感分析中的应用,以及多模态情绪识别框架的设计。此外,还介绍了电商评论分析系统的构建与优化策略,包括领域自适应训练和集成学习等方法。未来,随着深度学习和多模态数据的发展,该技术将更加智能与精准。
866 1
|
自然语言处理 安全 测试技术
基于大模型的应用的测试的一些注意事项
大模型应用测试需注意三大冲突:时间敏感性冲突,即模型数据可能随时间变得过时;数据真实性冲突,指训练数据中可能存在虚假信息,影响模型准确性;数据一致性冲突,表现为模型对语义相同但句法不同的输入反应不一。测试时应针对这些问题设计用例,确保模型性能。
758 4
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
1829 14
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
安全
【Shiro】2、Shiro实现Session会话过期时间控制
一般我们的 session 会话过期时间默认为 30 分钟,有的用户认为 30 分钟太短了,有时候临时有事出去了,回来已经过期了,工作还没完成就只能登出了,非常不方便,于是要求我们改变 session 的过期时间
1588 0
|
机器学习/深度学习 文字识别 自然语言处理
深度学习之文本框检测
基于深度学习的文本框检测(Text Box Detection)是一项重要的计算机视觉任务,旨在从图像中自动检测和定位文本区域。它在光学字符识别(OCR)、自动文档处理、交通标志识别等领域具有广泛的应用。
378 2