首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

基於 Lucene 案例開發:ParseUtil 與 ParseRequest 工具類詳解

     編輯:關於C++

在基於 Lucene 的企業級搜索應用開發中,參數解析與類型轉換是高頻需求。本文介紹兩個核心工具類:ParseUtil(字符串轉數值)與 ParseRequest(HTTP 參數獲取與轉換),展示如何通過封裝通用邏輯提升代碼可維護性。

ParseUtil:字符串安全轉數值

核心思想:統一異常處理,提供默認值,避免業務代碼重複 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;
    }
}

設計亮點

  • 靜態方法:無狀態,直接調用。
  • 默認值參數:調用者自定義轉換失敗時的語義(如 0、-1、Long.MIN_VALUE)。
  • 吞噬異常:捕獲所有異常,保證方法不拋出,簡化調用邏輯。
  • 擴展性:易添加 Boolean、Float、BigDecimal 等重載。

ParseRequest:HTTP 參數統一獲取入口

封裝 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; }
    }
}

關鍵技術點

  1. 編碼轉換:new String(param.getBytes("ISO-8859-1"), "UTF-8") 是經典修正 Tomcat 8+ 默認 ISO-8859-1 解析中文亂碼的方法。
  2. 雙編碼支持:提供 UTF-8 和 GBK 兩版本,適配不同前端/客戶端。
  3. 統一異常處理:數值轉換失敗靜默返回默認值,避免 Controller 層繁瑣判斷。
  4. 去空格:.trim() 防止前端傳遞「 123 」導致解析失敗。

架構定位與最佳實踐

工具類設計原則

  • 單一職責:ParseUtil 只管字符串→數值,ParseRequest 只管 Request→業務類型。
  • 無狀態靜態:適合高併發 Web 環境,無線程安全問題。
  • 「寧濫勿缺」:作者註明「有些方法案例中未必用到」,目的是構建完整工具箱,新功能直接調用,無需重寫。

實際使用場景

// 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 包作為標準組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved