工具类
章节简介
本章节介绍系统中工具类使用准则,以及一些常用的工具类
不推荐自己写!
我们不应该去做重复造轮子的事情,甚至造出来的轮子是不如外面成熟的轮子的。所以推荐使用HuTool这个工具包。此工具包包含了大部分的工具类,并且经过了大量的测试。基本满足项目使用
HuTool
适用范围
文件操作、LocalDate处理、流操作、常用加密算法、反射操作、Http请求
HuTool具体包含功能请参阅官方文档:HuTool
POI-TL
适用范围
根据模板输出Word文档相关操作
POI-TL是POI的一个扩展,专门用于处理word 参考链接:https://deepoove.com/poi-tl/
示例代码:
template.docx文件中,占位符样式
{{title}}
//java数据对象,DTO或者VO一类,此处仅为示例
ModelData data = new ModelData();
data.setTitle("这里是标题");
XWPFTemplate template = XWPFTemplate.compile("template.docx").render(data);
// 这里可以换成文件输出流等其他类型的输出流,或者传到OSS,把网址返回给前端
template.writeAndClose(new FileOutputStream("output.docx"));
系统内置
提示
上面也说,尽量不自己造轮子,所以系统只保留了极少数的工具类,其中像StringUtil这种也是又大量现成的轮子可以使用,只是有一些历史包袱原因,迫不得已保留了下来。
SystemUtil:此类封装了部分系统信息获取方法
/**
* 获取当前请求Request对象
* @return HttpServletRequest对象
*/
public static HttpServletRequest getRequest();
/**
* 获取当前请求Response对象
* @return HttpServletResponse对象
*/
public static HttpServletResponse getResponse();
/**
* 获取当前请求Session对象
* @return HttpSession对象
*/
public static HttpSession getSession();
/**
* 直接往HttpResponse对象写入resource文件夹下的文件
* 假设文件在resource/template/aaa.xlsx,通过此方法可以直接往输出流中写入文件内容,实现下载
* 常用于下载excel模板等功能
* @param filePath 文件路径,相对于resource文件夹的相对路径
*/
public static void downloadClassPathFile(String filePath);
/**
* 上面方法的重载,可以指定文件的MIME类型,例如application/vnd.ms-excel等
* @param filePath 文件路径,相对于resource文件夹的相对路径
* @param contentType 文件的MIME类型,例如application/vnd.ms-excel等
*/
public static void downloadClassPathFile(String filePath, String contentType);
/**
* 获取OS的临时目录
* @return 临时目录的绝对路径
*/
public static String getTmpDir();
SpringContextUtil:此类主要封装了Spring容器获取Bean的方法
/**
* 获取Spring容器中的Bean
* @param beanName beanName
* @return Spring管理的Bean
*/
public static <T> T getBean(String beanName);
/**
* 获取Spring容器中的Bean
* @param requiredType 类.class对象
* @return Spring管理的Bean
*/
public static <T> T getBean(Class<T> requiredType);
StringUtil:常用字符串操作,比如判空,判不空,判相等
/**
* 判断字符串是否为空
* @param str str
* @return true or false
*/
public static boolean isNotEmpty(Object str);
/**
* 判断字符串是否为空
* @param cs 字符串
* @return true or false
*/
public static boolean isEmpty(CharSequence cs);
/**
* 字符串两边包裹指定字符,例如wrapper("abc", "%"") => %abc%
* @param str str
* @param wrapper wrapper
* @return String
*/
public static String wrapper(String str, String wrapper);
/**
* 字符串拼接
* @param ele ele 字符串数组,可以是单个元素或者多个元素
* @return String 拼接后的字符串,默认使用空格作为分隔符
*/
public static String join(String... ele);
/**
* 字符串拼接
* @param list 集合
* @return String 拼接后的字符串,默认使用空格作为分隔符
*/
public static String join(Collection<?> list);
/**
* 字符串拼接
* @param list 集合
* @param separator 分隔符
* @return String 拼接后的字符串
*/
public static String join(Collection<?> list, String separator);
/**
* 字符串相等判断,如果两边都是null,也算作相等
* @param cs1 字符串1
* @param cs2 字符串2
* @return true or false
*/
public static boolean equals(String cs1, String cs2);
TreeBuilder:Java中从List构建一颗树的工具类,运用了Java8的Lambda表达式,传入getter/setter方法,构建父子关系
/**
* 构建树结构
*
* @param dataList 数据列表
* @param idGetter 获取 ID 的方法引用
* @param parentIdGetter 获取父 ID 的方法引用
* @param childrenSetter 设置子节点的方法引用
* @param rootParentId 根节点的父 ID
* @param isAbandon 如果某条数据找不到对应的parent,是否舍弃这条数据,默认为true
* @return 构建完成的树
*/
public List<T> buildTree(List<T> dataList, Function<T, Object> idGetter,
Function<T, Object> parentIdGetter, Function<T, List<T>> childrenSetter,
Object rootParentId,boolean isAbandon);
/**
上面方法的重载,默认了isAbandon为true,即如果某条数据找不到对应的parent,则舍弃这条数据
*/
public List<T> buildTree(List<T> dataList, Function<T, Object> idGetter,
Function<T, Object> parentIdGetter, Function<T, List<T>> childrenSetter,
Object rootParentId);
自建工具类
如果HuTool不能满足你的需求,你可以自建工具类。但是请注意以下几点:
- 请将工具类放在引用的模块包下,新建一个
utils包,在里面新建工具类 - 请勿必进行单元测试,保证工具类的正确性
- 工具类尽量保障可以通过
main方法启动,不要依赖于Spring容器
