Java開(kāi)發(fā)基礎(chǔ)工具包

Java常用工具類整合

一浪漠、引入依賴

<dependency>
  <groupId>cn.gjing</groupId>
  <artifactId>tools-common</artifactId>
  <version>1.6.2</version>
</dependency>

二姜胖、允許跨域:

開(kāi)啟全局允許跨域, 在啟動(dòng)類或者任意類使用@EnableCors注解即可,會(huì)走默認(rèn)配置栋操,也可以自定義配置,配置示例如下:

  • yml方式
tools:
  common:
    cors:
      # 支持的方法類型
      allowed-methods: POST,GET,DELETE,PUT,OPTIONS
      # 支持的請(qǐng)求頭
      allowed-headers:
      # 支持的域名
      allowed-origins:
      # 方法路徑
      path: /**
      max-age: 1800
  • javaBean方式
/**
 * @author Gjing
 **/
@Configuration
public class CorsConfiguration {
    @Bean
    public CorsBean corsBean() {
        CorsBean corsBean = new CorsBean();
        corsBean.setAllowedMethods(new String[]{"POST"});
        return corsBean;
    }
}

三饱亮、結(jié)果bean:

1矾芙、ResultVO

通用返回結(jié)果模板

參數(shù) 描述
code 狀態(tài)碼
message 提示信息
data 數(shù)據(jù)

2、PageResult

分頁(yè)查詢返回結(jié)果集

參數(shù) 描述
totalPages 總頁(yè)數(shù)
CurrentPage 當(dāng)前頁(yè)數(shù)
totalRows 總條數(shù)
pageRows 每頁(yè)的條數(shù)
data 數(shù)據(jù)

3近上、ErrorResult

錯(cuò)誤返回模板

參數(shù) 描述
code 狀態(tài)碼
message 提示信息

四剔宪、參數(shù)校驗(yàn)工具類:

主要提供參數(shù)校驗(yàn)、處理,匹配等等壹无, 使用時(shí)通過(guò)ParamUtils.xxx()使用葱绒,以下為該工具的所有方法介紹 :

1、isEmpty

判斷給定參數(shù)是否為空斗锭,可以是字符串地淀、包裝類型、數(shù)組岖是、集合等

參數(shù) 描述
param 參數(shù)

2帮毁、isNotEmpty

判斷給定是否不為空,可以是字符串豺撑、包裝類型烈疚、數(shù)組、集合等

參數(shù) 描述
param 參數(shù)

3聪轿、requireNotNull

該參數(shù)不能為空爷肝,為空拋出NPE,否則返回原值

參數(shù) 描述
param 參數(shù)

4、ListHasEmpty

判斷集合里是否含有空值

參數(shù) 描述
list 集合

5灯抛、multiEmpty

檢查多個(gè)參數(shù)里面是否有空值

參數(shù) 描述
params 多個(gè)參數(shù)

6金赦、equals

判斷兩個(gè)參數(shù)是否相等

參數(shù) 描述
param1 參數(shù)1
param2 參數(shù)2

7、trim

去除字符串的空格

參數(shù) 描述
str 字符串

8对嚼、trim

去除集合中的空元素

參數(shù) 描述
list 集合

9素邪、removeSymbol

移除字符串兩邊的指定符號(hào)

參數(shù) 描述
str 字符串
symbol 符號(hào)

10、removeStartSymbol

移除字符串開(kāi)始的指定符號(hào)

參數(shù) 描述
str 字符串
symbol 符號(hào)

11猪半、removeEndSymbol

移除字符串末尾的指定符號(hào)

參數(shù) 描述
str 字符串
symbol 符號(hào)

12、split

根據(jù)符號(hào)截取

參數(shù) 描述
str 字符串
symbol 符號(hào)

13偷线、removeAllSymbol

移除字符串里的所有指定符號(hào)

參數(shù) 描述
str 字符串
symbol 符號(hào)

14磨确、contains

判斷數(shù)組里是否包含指定的值

參數(shù) 描述
arr 數(shù)組
val

15、isEmail

判斷是否為email

參數(shù) 描述
email 字符串

16声邦、isMobileNumber

判斷是否是手機(jī)號(hào)碼

參數(shù) 描述
phone 字符串

17乏奥、isTelPhone

判斷是不是電話號(hào)碼

參數(shù) 描述
tel 字符串

18、isPostCode

判斷是否為郵編

參數(shù) 描述
postCode 字符串

五亥曹、時(shí)間工具類:

對(duì)時(shí)間進(jìn)行操作邓了,使用時(shí)通過(guò)TimeUtils.xxx()調(diào)用,該工具的所有方法介紹如下 :

六媳瞪、加密工具類

1骗炉、EncryptionUtils:

  • EncryptionUtils.encodeMd5():MD5加密
  • EncryptionUtils.encodeBase64():Base64加密
  • EncryptionUtils.decodeBase64():Base64解密

2、ShaUtils:

  • ShaUtils.encodeSha256Hmac():Sha356Hmac加密
  • ShaUtils.sha1Hmac():sha1Hmac加密

3蛇受、AesUtils:

  • AesUtils.encode():AES加密
  • AesUtils.decode():AES解密

七句葵、隨機(jī)數(shù)工具類

用于隨機(jī)生成數(shù)字或字符串,使用時(shí)通過(guò)RandomUtils.xxx()調(diào)用兢仰,該工具包含的所有方法如下 :

  • RandomUtils.randomInt():獲取隨機(jī)整數(shù)乍丈,可設(shè)置最大值和最小值
  • RandomUtils.getRandom():獲取一個(gè)Random實(shí)例
  • RandomUtils.generateMixString():生成混合指定長(zhǎng)度字符串(數(shù)字、字母大小寫(xiě))
  • RandomUtils.generateString():獲取指定長(zhǎng)度純字符串(字母大小寫(xiě))
  • RandomUtils.generateNumber():獲取指定長(zhǎng)度數(shù)字字符串

八把将、Bean工具類

使用時(shí)通過(guò)BeanUtils.xxx()調(diào)用

1轻专、copyProperties

屬性復(fù)制,用于將一個(gè)對(duì)象的屬性賦值到另一個(gè)對(duì)象察蹲,兩個(gè)對(duì)象間的參數(shù)名和數(shù)據(jù)類型必須相同
參數(shù)說(shuō)明

參數(shù) 描述
source 源對(duì)象
target 目標(biāo)對(duì)象
ignores 忽略的字段请垛,設(shè)置后不會(huì)進(jìn)行復(fù)制

2、toBean

將map轉(zhuǎn)為bean對(duì)象
參數(shù)說(shuō)明

參數(shù) 描述
map 需要轉(zhuǎn)為Bean的map
beanClass 目標(biāo)Bean的class

3洽议、findMethod

查找類中的方法
參數(shù)說(shuō)明

參數(shù) 描述
clazz 目標(biāo)類class
methodName 方法名
paramTypes 方法參數(shù)類型

4叼屠、findDeclaredMethod

查找類中聲明的方法
參數(shù)說(shuō)明

參數(shù) 描述
clazz 目標(biāo)類class
methodName 方法名
paramTypes 方法參數(shù)類型

5、setFieldValue

給類中的某個(gè)字段設(shè)置值
參數(shù)說(shuō)明

參數(shù) 描述
o 字段所在的對(duì)象
field 字段
value

6绞铃、getFieldValue

獲取某個(gè)字段的值
參數(shù)說(shuō)明

參數(shù) 描述
o 字段所在的對(duì)象
field 字段

7镜雨、toMap

將bean對(duì)象轉(zhuǎn)為map
參數(shù)說(shuō)明

參數(shù) 描述
bean 需要轉(zhuǎn)為map的bean對(duì)象

8、getInterfaceType

獲取泛型接口中某個(gè)泛型的真實(shí)對(duì)象class
參數(shù)說(shuō)明

參數(shù) 描述
source 實(shí)現(xiàn)泛型接口的類
typeInterface 泛型接口
paramIndex 泛型參數(shù)下標(biāo),0開(kāi)始

9荚坞、getGenericType

獲取某個(gè)泛型字段的真實(shí)對(duì)象class
參數(shù)說(shuō)明

參數(shù) 描述
type 字段的泛型類型
paramIndex 泛型參數(shù)下標(biāo)挑宠,0開(kāi)始

九、唯一ID生成工具類

項(xiàng)目中使用可以將IdUtils注冊(cè)為一個(gè)bean以在其他地方進(jìn)行依賴注入, 或者將其設(shè)置為靜態(tài)的, 不要出現(xiàn)重復(fù)的IdUtils對(duì)象, 否則并發(fā)情況下會(huì)出現(xiàn)重復(fù),
如果要調(diào)用snowId, 必須通過(guò)帶參數(shù)的構(gòu)造方法進(jìn)行創(chuàng)建實(shí)例

1颓影、uuid

獲取去除-符號(hào)的uuid

public class Test{
    public static void main(String[] args){
      IdUtils idUtils = new IdUtils();
      System.out.println(idUtils.uuid());
    }
}

2各淀、snowId

得到一個(gè)唯一的ID,在多服務(wù)需要操作同一個(gè)數(shù)據(jù)表的情況下, 需要保證每個(gè)服務(wù)的centerIdmachineId唯一

public class Test{
    public static void main(String[] args){
      IdUtils idUtils = new IdUtils(1,2);
      for(int i = 0; i < 100; i++) {
        System.out.println(idUtils.snowId());
      }
    }
}

十诡挂、郵件工具類

用于發(fā)送郵件碎浇,支持普通郵件和帶附件郵件,支持html格式文本,支持群發(fā)和抄送,返回true為發(fā)送成功,使用時(shí)通過(guò)EmailUtils.of()生成實(shí)例之后在進(jìn)行其中的方法璃俗,of()方法參數(shù)如下 :

參數(shù) 描述
host smtp服務(wù)器地址,比如qq郵箱:smtp.qq.com
password 發(fā)送者郵箱密碼,有些郵箱需要用授權(quán)碼代替密碼
from 發(fā)送人郵箱

該工具包含的所有方法如下 :

1奴璃、sendEmail

發(fā)送郵件,參數(shù)如下:

參數(shù) 描述
subject 主題
body 郵件內(nèi)容城豁,支持HTML
files 要發(fā)送的附件物理地址,不要可以傳null或者空數(shù)組
tos 收件人郵箱賬號(hào)苟穆,多個(gè)使用逗號(hào)隔開(kāi)
copyTo 抄送人地址,多個(gè)用逗號(hào)隔開(kāi)唱星,不抄送可以傳null或者空字符串

完整示例如下 :

public class Test{
    public static void main(String[] args) {
        boolean b = EmailUtil.of("smtp.qq.com", "發(fā)送人密碼或者授權(quán)碼", "發(fā)送人郵箱")
                .sendEmail("主題", "內(nèi)容",new String[]{"附件物理地址"},"收件人郵箱地址", "抄送人郵箱地址");
        if (b) {
            System.out.println("發(fā)送成功");
        }
    }
}

十一雳旅、二維碼工具類

二維碼工具類, 包含的所有方法如下 :

1、create()

根據(jù)文本內(nèi)容间聊,自定義寬度高度攒盈,自定義圖片格式,自定義配置信息哎榴,生成所需要的二維碼圖片沦童,所有參數(shù)如下

參數(shù) 描述
text 文本內(nèi)容
filePath 生成圖片路徑
width
height
format 圖片格式 ,png,img
hintTypes 自定義配置信息

2、createWithLogo()

自定義生成帶logo的二維碼圖片叹话,所有參數(shù)如下:

參數(shù) 描述
text 文本內(nèi)容
filePath 生成圖片路徑
logoPath logo文件路徑
qrCodeWidth 二維碼寬度
qrCodeHeight 二維碼高度
logoWidth logo寬度
logoHeight logo高度
format 圖片格式

3偷遗、read(String filePath)

解析二維碼,獲取其中文本信息

參數(shù)說(shuō)明

參數(shù) 描述
filePath 圖片路徑

4、read(InputStream inputStream)

解析二維碼,獲取其中的文本信息

參數(shù)說(shuō)明

參數(shù) 描述
inputStream 輸入流

5驼壶、read(String filePath, Map<DecodeHintType, Object> decodeHints)

自定義配置解析二維碼,獲取其中的文本信息

參數(shù)說(shuō)明

參數(shù) 描述
filePath 圖片路徑
decodeHints 解析配置信息

6氏豌、read(InputStream inputStream, Map<DecodeHintType, Object> decodeHints)

自定義配置解析二維碼,獲取其中的文本信息

參數(shù)說(shuō)明

參數(shù) 描述
inputStream 輸入流
decodeHints 解析配置信息

十二、驗(yàn)證碼工具類

用于生成英文和數(shù)字混合的驗(yàn)證碼热凹,使用時(shí)通過(guò)構(gòu)造AuthCodeUtils在進(jìn)行調(diào)用其中的方法泵喘,構(gòu)造時(shí)參數(shù)如下 :

參數(shù) 描述
width 驗(yàn)證碼圖片寬度
height 驗(yàn)證碼圖片高度
codeCount 驗(yàn)證碼字符個(gè)數(shù)
lineCount 驗(yàn)證碼干擾線數(shù)

該工具下的所有方法如下:

1、writeToLocal

生成驗(yàn)證碼到本地般妙,案例如下

public class Test{
    public static void main(String[] args) {
        AuthCodeUtil authCodeUtil = new AuthCodeUtil(160,40,5,150);
        try {
            String path="/文件夾路徑/code.png";
            //寫(xiě)入到本地時(shí)可以通過(guò)getCode()方法獲取生成的驗(yàn)證碼
            String code = authCodeUtil.writeToLocal(path).getCode();
            System.out.println(code);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2纪铺、getCode

獲取生成的驗(yàn)證碼字符

public class Test{
    public static void main(String[] args){
      String code = authCodeUtil.writeToLocal(xxx).getCode;
      System.out.println(code);
    }
}

3、write

以流的方式返回給前端碟渺,案例如下

public class Test{
    @GetMapping("/code")
    public void getCode(HttpServletResponse response, HttpServletRequest request) throws IOException {
        AuthCodeUtil authCodeUtil = new AuthCodeUtil(100, 50, 4, 50);
        response.setContentType("image/jpeg");
        //禁止圖像緩存
        response.setHeader("param", "no-cache");
        response.setDateHeader("Expires", 0);
        authCodeUtil.write(response.getOutputStream());
    }
}

十三鲜锚、Spring Bean工具類

獲取Spring Bean和ApplicationContext

1、獲取Bean

public class Test{
    @GetMapping("/test")
    public void test(){
        //通過(guò)class獲取
        Test test = SpringBeanUtils.getBean(Test.class);
        //通過(guò)bean name獲取
        Object o = SpringBeanUtils.getBean("test");
    }
}

2、獲取ApplicationContext

public class Test{
    private ApplicationContext applicationContext;
    
    public Test(){
        this.applicationContext = SpringBeanUtils.getApplicationContext();
    }
}

工具源碼地址:tools-common

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芜繁,一起剝皮案震驚了整個(gè)濱河市旺隙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骏令,老刑警劉巖蔬捷,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異榔袋,居然都是意外死亡周拐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)凰兑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妥粟,“玉大人,你說(shuō)我怎么就攤上這事聪黎。” “怎么了备恤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵稿饰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我露泊,道長(zhǎng)喉镰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任惭笑,我火速辦了婚禮侣姆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沉噩。我一直安慰自己捺宗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布川蒙。 她就那樣靜靜地躺著蚜厉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜眨。 梳的紋絲不亂的頭發(fā)上昼牛,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音康聂,去河邊找鬼贰健。 笑死,一個(gè)胖子當(dāng)著我的面吹牛恬汁,可吹牛的內(nèi)容都是我干的伶椿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悬垃!你這毒婦竟也來(lái)了游昼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尝蠕,失蹤者是張志新(化名)和其女友劉穎烘豌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體看彼,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廊佩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靖榕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片标锄。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茁计,靈堂內(nèi)的尸體忽然破棺而出料皇,到底是詐尸還是另有隱情,我是刑警寧澤星压,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布践剂,位于F島的核電站,受9級(jí)特大地震影響娜膘,放射性物質(zhì)發(fā)生泄漏逊脯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一竣贪、第九天 我趴在偏房一處隱蔽的房頂上張望军洼。 院中可真熱鬧,春花似錦演怎、人聲如沸匕争。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汗捡。三九已至,卻和暖如春畏纲,著一層夾襖步出監(jiān)牢的瞬間扇住,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工盗胀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艘蹋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓票灰,卻偏偏與公主長(zhǎng)得像女阀,于是被迫代替她去往敵國(guó)和親宅荤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容