在基於 Lucene 的企業級搜索應用開發中,參數解析與類型轉換是高頻需求。本文介紹兩個核心工具類:ParseUtil(字符串轉數值)與 ParseRequest(HTTP 參數獲取與轉換),展示如何通過封裝通用邏輯提升代碼可維護性。
核心思想:統一異常處理,提供默認值,避免業務代碼重複 try-catch。
package com.lulei.util;
public class ParseUtil {
// 字符串 -> double
public static double parseStringToDouble(String str, double defaultDouble) {
double re = defaultDouble;
try { re = Double.parseDouble(str); } catch (Exception e) {}
return re;
}
// 字符串 -> int
public static int parseStringToInt(String str, int defaultInt) {
int re = defaultInt;
try { re = Integer.parseInt(str); } catch (Exception e) {}
return re;
}
// 字符串 -> long
public static long parseStringToLong(String str, long defaultLong) {
long re = defaultLong;
try { re = Long.parseLong(str); } catch (Exception e) {}
return re;
}
}
封裝 HttpServletRequest.getParameter(),集成編碼轉換、去空格、類型轉換、默認值處理。
package com.lulei.util;
import javax.servlet.http.HttpServletRequest;
public class ParseRequest {
// 獲取字符串參數(UTF-8)
public static String getString(HttpServletRequest request, String paramName, String defaultStr) {
String param = request.getParameter(paramName);
if (param == null) return defaultStr;
try {
// ISO-8859-1 -> UTF-8 轉碼(解決 Tomcat 默認編碼問題)
return new String(param.getBytes("ISO-8859-1"), "UTF-8").trim();
} catch (Exception e) {
e.printStackTrace();
return defaultStr;
}
}
// 獲取字符串參數(GBK)
public static String getStringGbk(HttpServletRequest request, String paramName, String defaultStr) {
String param = request.getParameter(paramName);
if (param == null) return defaultStr;
try {
return new String(param.getBytes("ISO-8859-1"), "GBK").trim();
} catch (Exception e) {
e.printStackTrace();
return defaultStr;
}
}
// 獲取 int 參數
public static int getInt(HttpServletRequest request, String paramName, int defaultInt) {
String param = request.getParameter(paramName);
if (param == null) return defaultInt;
try { return Integer.parseInt(param); } catch (Exception e) { return defaultInt; }
}
// 獲取 long 參數
public static long getLong(HttpServletRequest request, String paramName, long defaultLong) {
String param = request.getParameter(paramName);
if (param == null) return defaultLong;
try { return Long.parseLong(param); } catch (Exception e) { return defaultLong; }
}
}
new String(param.getBytes("ISO-8859-1"), "UTF-8") 是經典修正 Tomcat 8+ 默認 ISO-8859-1 解析中文亂碼的方法。.trim() 防止前端傳遞「 123 」導致解析失敗。// Controller 中
int page = ParseRequest.getInt(request, "page", 1);
int size = ParseRequest.getInt(request, "size", 20);
String keyword = ParseRequest.getString(request, "q", "");
long userId = ParseRequest.getLong(request, "uid", -1L);
// 配置文件讀取
String confVal = config.get("timeout");
int timeout = ParseUtil.parseStringToInt(confVal, 3000);
ParseUtil 和 ParseRequest 體現了「封裝變化、統一異常處理、提供合理默認值」的工程智慧。雖然代碼簡單,但將這類基礎設施沉澱為工具類,能顯著減少業務代碼的樣板代碼,提升項目整體質量。在 Lucene 或任何 Web 項目中,建議建立類似的 util.parse 包作為標準組件。