java中如何實現(xiàn) zip rar 7z 壓縮包解壓
更新時間:2023年07月15日 11:24:57 作者:彭先生吖
這篇文章主要介紹了java中如何實現(xiàn) zip rar 7z 壓縮包解壓問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
java zip rar 7z 壓縮包解壓
7z和rar需要引入maven依賴,zip使用java自帶的
<!-- 7z解壓依賴 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>org.tukaani</groupId> <artifactId>xz</artifactId> <version>1.5</version> </dependency> <!-- rar解壓依賴 -- > <dependency> <groupId>net.sf.sevenzipjbinding</groupId> <artifactId>sevenzipjbinding</artifactId> <version>16.02-2.01</version> </dependency> <dependency> <groupId>net.sf.sevenzipjbinding</groupId> <artifactId>sevenzipjbinding-all-platforms</artifactId> <version>16.02-2.01</version> </dependency>
編寫解壓util工具類
/** * 文件解壓縮工具類 */ public class UnFileUtil { /** * rar解壓縮 * @param rarFile rar文件的全路徑 * @return 壓縮包中所有的文件 */ @SuppressWarnings("resource") public static Map<String, String> unRar(String rarFile) { RandomAccessFile randomAccessFile = null; IInArchive archive = null; try { File f = new File(rarFile); randomAccessFile = new RandomAccessFile(f.getAbsolutePath(), "rw"); archive = SevenZip.openInArchive(ArchiveFormat.RAR, new RandomAccessFileInStream(randomAccessFile)); String outPath = f.getAbsolutePath().substring(0, f.getAbsolutePath().indexOf(".")); File zdir = new File(outPath); if (zdir.isDirectory()) { zdir.delete(); } zdir.mkdir(); int[] in = new int[archive.getNumberOfItems()]; for (int i = 0; i < in.length; i++) { in[i] = i; } archive.extract(in, false, new ExtractCallback(archive,zdir.getAbsolutePath() + "/")); //解壓后獲取壓縮包下全部文件列表 Map<String, String> zipFileMap = getFileNameList(outPath,""); return zipFileMap; } catch (FileNotFoundException | SevenZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(randomAccessFile != null) randomAccessFile.close(); if(archive != null) archive.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 獲取壓縮包中的全部文件 * @param path 文件夾路徑 * @childName 每一個文件的每一層的路徑==D==區(qū)分層數(shù) * @return 壓縮包中所有的文件 */ private static Map<String, String> getFileNameList(String path, String childName) { System.out.println("path:" + path + "---childName:"+childName); Map<String, String> files = new HashMap<>(); File file = new File(path); // 需要獲取的文件的路徑 String[] fileNameLists = file.list(); // 存儲文件名的String數(shù)組 File[] filePathLists = file.listFiles(); // 存儲文件路徑的String數(shù)組 for (int i = 0; i < filePathLists.length; i++) { if (filePathLists[i].isFile()) { files.put(fileNameLists[i] + "==D==" + childName, path + File.separator + filePathLists[i].getName()); } else { files.putAll(getFileNameList(path + File.separator + filePathLists[i].getName(), childName + "&" + filePathLists[i].getName())); } } return files; } /** * zip解壓縮 * @param zipFilePath zip文件的全路徑 * @param unzipFilePath 解壓后文件保存路徑 * @param includeZipFileName 解壓后文件是否包含壓縮包文件名,true包含,false不包含 * @return 壓縮包中所有的文件 */ @SuppressWarnings("resource") public static Map<String, String> unZip(String zipFilePath, String unzipFilePath, boolean includeZipFileName) throws Exception{ File zipFile = new File(zipFilePath); //如果包含壓縮包文件名,則處理保存路徑 if(includeZipFileName){ String fileName = zipFile.getName(); if(StringUtils.isNotEmpty(fileName)){ fileName = fileName.substring(0,fileName.lastIndexOf(".")); } unzipFilePath = unzipFilePath + File.separator + fileName; } //判斷保存路徑是否存在,不存在則創(chuàng)建 File unzipFileDir = new File(unzipFilePath); if(!unzipFileDir.exists() || !unzipFileDir.isDirectory()){ unzipFileDir.mkdirs(); } //開始解壓 ZipEntry entry = null; String entryFilePath = null, entryDirPath = ""; File entryFile = null, entryDir = null; int index = 0, count = 0, bufferSize = 1024; byte[] buffer = new byte[bufferSize]; BufferedInputStream bis = null; BufferedOutputStream bos = null; Charset gbk = Charset.forName("GBK"); ZipFile zip = new ZipFile(zipFile, gbk); try { Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); entryFilePath = unzipFilePath + File.separator + entry.getName(); entryFilePath = entryFilePath.replace("/", File.separator); index = entryFilePath.lastIndexOf(File.separator); if (index != -1) { entryDirPath = entryFilePath.substring(0, index); } entryDir = new File(entryDirPath); if (!entryDir.exists() || !entryDir.isDirectory()) { entryDir.mkdirs(); } entryFile = new File(entryFilePath); //判斷當前文件父類路徑是否存在,不存在則創(chuàng)建 if(!entryFile.getParentFile().exists() || !entryFile.getParentFile().isDirectory()){ entryFile.getParentFile().mkdirs(); } //不是文件說明是文件夾創(chuàng)建即可,無需寫入 if(entryFile.isDirectory()){ continue; } bos = new BufferedOutputStream(new FileOutputStream(entryFile)); bis = new BufferedInputStream(zip.getInputStream(entry)); while ((count = bis.read(buffer, 0, bufferSize)) != -1) { bos.write(buffer, 0, count); } } }catch (Exception e){ e.printStackTrace(); }finally { bos.flush(); bos.close(); bis.close(); zip.close(); } Map<String, String> resultMap = getFileNameList(unzipFilePath, ""); return resultMap; } /** * zip解壓縮 * @param zipFilePath zip文件的全路徑 * @param includeZipFileName 解壓后文件是否包含壓縮包文件名,true包含,false不包含 * @return 壓縮包中所有的文件 */ @SuppressWarnings("resource") public static Map<String, String> unZip(String zipFilePath, boolean includeZipFileName) throws Exception{ File zipFile = new File(zipFilePath); String unzipFilePath = zipFilePath.substring(0, zipFilePath.lastIndexOf(File.separator)); //如果包含壓縮包文件名,則處理保存路徑 if(includeZipFileName){ String fileName = zipFile.getName(); if(StringUtils.isNotEmpty(fileName)){ fileName = fileName.substring(0,fileName.lastIndexOf(".")); } unzipFilePath = unzipFilePath + File.separator + fileName; } //判斷保存路徑是否存在,不存在則創(chuàng)建 File unzipFileDir = new File(unzipFilePath); if(!unzipFileDir.exists() || !unzipFileDir.isDirectory()){ unzipFileDir.mkdirs(); } //開始解壓 ZipEntry entry = null; String entryFilePath = null, entryDirPath = ""; File entryFile = null, entryDir = null; int index = 0, count = 0, bufferSize = 1024; byte[] buffer = new byte[bufferSize]; BufferedInputStream bis = null; BufferedOutputStream bos = null; Charset gbk = Charset.forName("GBK"); ZipFile zip = new ZipFile(zipFile, gbk); try { Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); entryFilePath = unzipFilePath + File.separator + entry.getName(); entryFilePath = entryFilePath.replace("/", File.separator); index = entryFilePath.lastIndexOf(File.separator); if (index != -1) { entryDirPath = entryFilePath.substring(0, index); } entryDir = new File(entryDirPath); if (!entryDir.exists() || !entryDir.isDirectory()) { entryDir.mkdirs(); } entryFile = new File(entryFilePath); //判斷當前文件父類路徑是否存在,不存在則創(chuàng)建 if(!entryFile.getParentFile().exists() || !entryFile.getParentFile().isDirectory()){ entryFile.getParentFile().mkdirs(); } //不是文件說明是文件夾創(chuàng)建即可,無需寫入 if(entryFile.isDirectory()){ continue; } bos = new BufferedOutputStream(new FileOutputStream(entryFile)); bis = new BufferedInputStream(zip.getInputStream(entry)); while ((count = bis.read(buffer, 0, bufferSize)) != -1) { bos.write(buffer, 0, count); } bos.flush(); bos.close(); bis.close(); } }catch (Exception e){ e.printStackTrace(); }finally { zip.close(); } Map<String, String> resultMap = getFileNameList(unzipFilePath, ""); return resultMap; } /** * 7z解壓縮 * @param z7zFilePath 7z文件的全路徑 * @return 壓縮包中所有的文件 */ public static Map<String, String> un7z(String z7zFilePath){ String un7zFilePath = ""; //壓縮之后的絕對路徑 SevenZFile zIn = null; try { File file = new File(z7zFilePath); un7zFilePath = file.getAbsolutePath().substring(0, file.getAbsolutePath().lastIndexOf(".7z")); zIn = new SevenZFile(file); SevenZArchiveEntry entry = null; File newFile = null; while ((entry = zIn.getNextEntry()) != null){ //不是文件夾就進行解壓 if(!entry.isDirectory()){ newFile = new File(un7zFilePath, entry.getName()); if(!newFile.exists()){ new File(newFile.getParent()).mkdirs(); //創(chuàng)建此文件的上層目錄 } OutputStream out = new FileOutputStream(newFile); BufferedOutputStream bos = new BufferedOutputStream(out); int len = -1; byte[] buf = new byte[(int)entry.getSize()]; while ((len = zIn.read(buf)) != -1){ bos.write(buf, 0, len); } bos.flush(); bos.close(); out.close(); } } } catch (Exception e) { e.printStackTrace(); }finally { try { if (zIn != null) zIn.close(); } catch (IOException e) { e.printStackTrace(); } } Map<String, String> resultMap = getFileNameList(un7zFilePath, ""); return resultMap; } public static void main(String[] args) { try { un7z("C:\\Users\\Admin\\Desktop\\1716F0190017.7z"); } catch (Exception e) { e.printStackTrace(); } } }
java常見壓縮包解壓工具類(支持:zip、7z和rar)
pom依賴
? ? ? ? <groupId>org.apache.commons</groupId> ? ? ? ? <artifactId>commons-compress</artifactId> ? ? ? ? <version>1.9</version> ? ? </dependency> ? ? <dependency> ? ? ? ? <groupId>org.tukaani</groupId> ? ? ? ? <artifactId>xz</artifactId> ? ? ? ? <version>1.5</version> ? ? </dependency> ? ? <!-- rar解壓依賴 --> ? <dependency> ? ? ? <groupId>net.sf.sevenzipjbinding</groupId> ? ? ? <artifactId>sevenzipjbinding</artifactId> ? ? ? <version>16.02-2.01</version> ? </dependency> ? <dependency> ? ? ? <groupId>net.sf.sevenzipjbinding</groupId> ? ? ? <artifactId>sevenzipjbinding-all-platforms</artifactId> ? ? ? <version>16.02-2.01</version> ? </dependency>
工具類實現(xiàn)
import cn.hutool.log.Log; import cn.hutool.log.LogFactory; import com.github.yulichang.common.support.func.S; import com.onemap.business.web.resultsCheck.service.impl.ResultPackageReportServiceImpl; import com.onemap.common.utils.StringUtils; import net.sf.sevenzipjbinding.*; import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; import net.sf.sevenzipjbinding.simple.ISimpleInArchive; import net.sf.sevenzipjbinding.simple.ISimpleInArchiveItem; import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry; import org.apache.commons.compress.archivers.sevenz.SevenZFile; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.*; import java.util.concurrent.*; import java.util.function.LongFunction; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * 文件解壓縮工具類 */ public class UnPagFileUtil { private static final Logger log = LoggerFactory.getLogger(UnFileUtil.class); /** * rar解壓縮 * @param rarFile rar文件的全路徑 * @param outPath 解壓路徑 * @return 壓縮包中所有的文件 */ public static void unRarZip7Z(String rarFile, String outPath) throws Exception { if (rarFile.toLowerCase().endsWith(".zip")) { unZip(rarFile, outPath, false); } else if (rarFile.toLowerCase().endsWith(".rar")) { unRar(rarFile, outPath, ""); } else if (rarFile.toLowerCase().endsWith(".7z")) { un7z(rarFile, outPath); } } /** * rar解壓縮 * @param rarFile rar文件的全路徑 * @param outPath 解壓路徑 * @return 壓縮包中所有的文件 */ private static String unRar(String rarFile, String outPath, String passWord) { RandomAccessFile randomAccessFile = null; IInArchive inArchive = null; try { // 第一個參數(shù)是需要解壓的壓縮包路徑,第二個參數(shù)參考JdkAPI文檔的RandomAccessFile randomAccessFile = new RandomAccessFile(rarFile, "r"); if (StringUtils.isNotBlank(passWord)) { inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile), passWord); } else { inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile)); } ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface(); for (final ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()) { final int[] hash = new int[]{0}; if (!item.isFolder()) { ExtractOperationResult result; final long[] sizeArray = new long[1]; File outFile = new File(outPath + File.separator+ item.getPath()); File parent = outFile.getParentFile(); if ((!parent.exists()) && (!parent.mkdirs())) { continue; } if (StringUtils.isNotBlank(passWord)) { result = item.extractSlow(data -> { try { IOUtils.write(data, new FileOutputStream(outFile, true)); } catch (Exception e) { e.printStackTrace(); } hash[0] ^= Arrays.hashCode(data); // Consume data sizeArray[0] += data.length; return data.length; // Return amount of consumed }, passWord); } else { result = item.extractSlow(data -> { try { IOUtils.write(data, new FileOutputStream(outFile, true)); } catch (Exception e) { e.printStackTrace(); } hash[0] ^= Arrays.hashCode(data); // Consume data sizeArray[0] += data.length; return data.length; // Return amount of consumed }); } if (result == ExtractOperationResult.OK) { log.error("解壓rar成功...." + String.format("%9X | %10s | %s", hash[0], sizeArray[0], item.getPath())); } else if (StringUtils.isNotBlank(passWord)) { log.error("解壓rar成功:密碼錯誤或者其他錯誤...." + result); return "password"; } else { return "rar error"; } } } } catch (Exception e) { log.error("unRar error", e); return e.getMessage(); } finally { try { inArchive.close(); randomAccessFile.close(); } catch (Exception e) { e.printStackTrace(); } } return ""; } /** * 獲取壓縮包中的全部文件 * @param path 文件夾路徑 * @childName 每一個文件的每一層的路徑==D==區(qū)分層數(shù) * @return 壓縮包中所有的文件 */ private static Map<String, String> getFileNameList(String path, String childName) { System.out.println("path:" + path + "---childName:"+childName); Map<String, String> files = new HashMap<>(); File file = new File(path); // 需要獲取的文件的路徑 String[] fileNameLists = file.list(); // 存儲文件名的String數(shù)組 File[] filePathLists = file.listFiles(); // 存儲文件路徑的String數(shù)組 for (int i = 0; i < filePathLists.length; i++) { if (filePathLists[i].isFile()) { files.put(fileNameLists[i] + "==D==" + childName, path + File.separator + filePathLists[i].getName()); } else { files.putAll(getFileNameList(path + File.separator + filePathLists[i].getName(), childName + "&" + filePathLists[i].getName())); } } return files; } /** * zip解壓縮 * @param zipFilePath zip文件的全路徑 * @param unzipFilePath 解壓后文件保存路徑 * @param includeZipFileName 解壓后文件是否包含壓縮包文件名,true包含,false不包含 * @return 壓縮包中所有的文件 */ public static Map<String, String> unZip(String zipFilePath, String unzipFilePath, boolean includeZipFileName) throws Exception{ File zipFile = new File(zipFilePath); //如果包含壓縮包文件名,則處理保存路徑 if(includeZipFileName){ String fileName = zipFile.getName(); if(StringUtils.isNotEmpty(fileName)){ fileName = fileName.substring(0,fileName.lastIndexOf(".")); } unzipFilePath = unzipFilePath + File.separator + fileName; } //判斷保存路徑是否存在,不存在則創(chuàng)建 File unzipFileDir = new File(unzipFilePath); if(!unzipFileDir.exists() || !unzipFileDir.isDirectory()){ unzipFileDir.mkdirs(); } //開始解壓 ZipEntry entry = null; String entryFilePath = null, entryDirPath = ""; File entryFile = null, entryDir = null; int index = 0, count = 0, bufferSize = 1024; byte[] buffer = new byte[bufferSize]; BufferedInputStream bis = null; BufferedOutputStream bos = null; Charset gbk = Charset.forName("GBK"); ZipFile zip = new ZipFile(zipFile, gbk); try { Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); entryFilePath = unzipFilePath + File.separator + entry.getName(); entryFilePath = entryFilePath.replace("/", File.separator); index = entryFilePath.lastIndexOf(File.separator); if (index != -1) { entryDirPath = entryFilePath.substring(0, index); } entryDir = new File(entryDirPath); if (!entryDir.exists() || !entryDir.isDirectory()) { entryDir.mkdirs(); } entryFile = new File(entryFilePath); //判斷當前文件父類路徑是否存在,不存在則創(chuàng)建 if(!entryFile.getParentFile().exists() || !entryFile.getParentFile().isDirectory()){ entryFile.getParentFile().mkdirs(); } //不是文件說明是文件夾創(chuàng)建即可,無需寫入 if(entryFile.isDirectory()){ continue; } bos = new BufferedOutputStream(new FileOutputStream(entryFile)); bis = new BufferedInputStream(zip.getInputStream(entry)); while ((count = bis.read(buffer, 0, bufferSize)) != -1) { bos.write(buffer, 0, count); } } }catch (Exception e){ e.printStackTrace(); }finally { bos.flush(); bos.close(); bis.close(); zip.close(); } Map<String, String> resultMap = getFileNameList(unzipFilePath, ""); return resultMap; } /** * zip解壓縮 * @param zipFilePath zip文件的全路徑 * @param includeZipFileName 解壓后文件是否包含壓縮包文件名,true包含,false不包含 * @return 壓縮包中所有的文件 */ public static Map<String, String> unZip(String zipFilePath, boolean includeZipFileName) throws Exception{ File zipFile = new File(zipFilePath); String unzipFilePath = zipFilePath.substring(0, zipFilePath.lastIndexOf(File.separator)); //如果包含壓縮包文件名,則處理保存路徑 if(includeZipFileName){ String fileName = zipFile.getName(); if(StringUtils.isNotEmpty(fileName)){ fileName = fileName.substring(0,fileName.lastIndexOf(".")); } unzipFilePath = unzipFilePath + File.separator + fileName; } //判斷保存路徑是否存在,不存在則創(chuàng)建 File unzipFileDir = new File(unzipFilePath); if(!unzipFileDir.exists() || !unzipFileDir.isDirectory()){ unzipFileDir.mkdirs(); } //開始解壓 ZipEntry entry = null; String entryFilePath = null, entryDirPath = ""; File entryFile = null, entryDir = null; int index = 0, count = 0, bufferSize = 1024; byte[] buffer = new byte[bufferSize]; BufferedInputStream bis = null; BufferedOutputStream bos = null; Charset gbk = Charset.forName("GBK"); ZipFile zip = new ZipFile(zipFile, gbk); try { Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); entryFilePath = unzipFilePath + File.separator + entry.getName(); entryFilePath = entryFilePath.replace("/", File.separator); index = entryFilePath.lastIndexOf(File.separator); if (index != -1) { entryDirPath = entryFilePath.substring(0, index); } entryDir = new File(entryDirPath); if (!entryDir.exists() || !entryDir.isDirectory()) { entryDir.mkdirs(); } entryFile = new File(entryFilePath); //判斷當前文件父類路徑是否存在,不存在則創(chuàng)建 if(!entryFile.getParentFile().exists() || !entryFile.getParentFile().isDirectory()){ entryFile.getParentFile().mkdirs(); } //不是文件說明是文件夾創(chuàng)建即可,無需寫入 if(entryFile.isDirectory()){ continue; } bos = new BufferedOutputStream(new FileOutputStream(entryFile)); bis = new BufferedInputStream(zip.getInputStream(entry)); while ((count = bis.read(buffer, 0, bufferSize)) != -1) { bos.write(buffer, 0, count); } bos.flush(); bos.close(); bis.close(); } }catch (Exception e){ e.printStackTrace(); }finally { zip.close(); } Map<String, String> resultMap = getFileNameList(unzipFilePath, ""); return resultMap; } /** * 7z解壓縮 * @param z7zFilePath 7z文件的全路徑 * @param outPath 解壓路徑 * @return 壓縮包中所有的文件 */ public static Map<String, String> un7z(String z7zFilePath, String outPath){ SevenZFile zIn = null; try { File file = new File(z7zFilePath); zIn = new SevenZFile(file); SevenZArchiveEntry entry = null; File newFile = null; while ((entry = zIn.getNextEntry()) != null){ //不是文件夾就進行解壓 if(!entry.isDirectory()){ newFile = new File(outPath, entry.getName()); if(!newFile.exists()){ new File(newFile.getParent()).mkdirs(); //創(chuàng)建此文件的上層目錄 } OutputStream out = new FileOutputStream(newFile); BufferedOutputStream bos = new BufferedOutputStream(out); int len = -1; byte[] buf = new byte[(int)entry.getSize()]; while ((len = zIn.read(buf)) != -1){ bos.write(buf, 0, len); } bos.flush(); bos.close(); out.close(); } } } catch (Exception e) { e.printStackTrace(); }finally { try { if (zIn != null) { zIn.close(); } } catch (IOException e) { e.printStackTrace(); } } Map<String, String> resultMap = getFileNameList(outPath, ""); return resultMap; } public static void main(String[] args) { try { String inputFile = "E:\\新建文件夾 (2)\\壓縮測試.zip"; String inputFile2 = "E:\\新建文件夾 (2)\\紅光村批復.rar"; String inputFile3 = "E:\\新建文件夾 (2)\\壓縮測試.7z"; String destDirPath = "E:\\新建文件夾\\zip"; String destDirPath2 = "E:\\新建文件夾\\rar"; String destDirPath3 = "E:\\新建文件夾\\7z"; String suffix = inputFile.substring(inputFile.lastIndexOf(".")); //File zipFile = new File("E:\\新建文件夾 (2)\\壓縮測試.7z"); //un7z(inputFile3, destDirPath3); //unZip(inputFile, destDirPath, false); unRar(inputFile2, destDirPath2, ""); } catch (Exception e) { e.printStackTrace(); } } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中使用JdbcTemplate訪問Oracle數(shù)據(jù)庫的案例詳解
JdbcTemplate是Spring框架中的一個核心類,用于簡化Java應(yīng)用程序與關(guān)系型數(shù)據(jù)庫的交互操作,本文給大家介紹SpringBoot中使用JdbcTemplate訪問Oracle數(shù)據(jù)庫的方法,感興趣的朋友跟隨小編一起看看吧2023-10-10java中對象轉(zhuǎn)json字符串的幾種常用方式舉例
這篇文章主要給大家介紹了關(guān)于java中對象轉(zhuǎn)json字符串的幾種常用方式,在Java中可以使用許多庫將對象轉(zhuǎn)換為JSON字符串,其中最常用的是Jackson和Gson,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-10-10使用ehcache三步搞定springboot緩存的方法示例
本次內(nèi)容主要介紹基于Ehcache 3.0來快速實現(xiàn)Spring Boot應(yīng)用程序的數(shù)據(jù)緩存功能。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04SpringBoot Admin健康檢查功能的實現(xiàn)
admin主要就是告訴運維人員,服務(wù)出現(xiàn)異常,然后進行通知(微信、郵件、短信、釘釘?shù)龋┛梢苑浅?焖偻ㄖ竭\維人員,相當報警功能,接下來通過本文給大家介紹SpringBoot Admin健康檢查的相關(guān)知識,一起看看吧2021-06-06@valid 無法觸發(fā)BindingResult的解決
這篇文章主要介紹了@valid 無法觸發(fā)BindingResult的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12