web获取参数值工具(改进,使用Callback)

     在前面的博客中写了一篇《自己封装的获取web端参数值工具》

     当时对具体获取值的逻辑进行的封装和抽象,如下:

    

    @SuppressWarnings("unchecked")  
    public static <T> T getValue(HttpServletRequest request, String paramName, T defaultValue, boolean notNull) throws ParamCheckException {  
        String paramValue = request.getParameter(paramName);  
        checkValue(paramName, paramValue, notNull);  
        if (paramValue != null) {  
            if (defaultValue instanceof Integer) {  
                return (T)(Integer.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Double) {  
                return (T)(Double.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Long) {  
                return (T)(Long.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Float) {  
                return (T)(Float.valueOf(paramValue));  
            }  
            if (defaultValue instanceof String) {  
                return (T)(paramValue);  
            }  
        }  
        return defaultValue;  
    }  

    虽然进行了一定的封装和抽象,可是总是觉得缺少了一下优雅,感觉十分臃肿, 在深入学习了Callback模式后,对原来的代码进行了改进,如下是全部代码:

   

package com.malone.family.util;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

import com.malone.family.common.Pagination;
import com.malone.family.exception.ParamCheckException;

public class WebUtils {

	
	/**
	 * 获取int值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static int getIntValue(HttpServletRequest request, String paramName, int defaultValue, boolean notNull) {
		return getValue(request, paramName, defaultValue, notNull, new WebUtilsCallback<Integer>(){
			public Integer doAction(String paramValue) {
				return Integer.valueOf(paramValue);
			}
		});
	}
	
	/**
	 * 所有方法的底层实现
	 * @param <T>
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @param notNull
	 * @param action
	 * @return
	 * @throws ParamCheckException
	 */
	public static <T> T getValue(HttpServletRequest request, String paramName, T defaultValue, boolean notNull, WebUtilsCallback<T> action) throws ParamCheckException {
		String paramValue = request.getParameter(paramName);
		checkValue(paramName, paramValue, notNull);
		if (paramValue != null) {
			return action.doAction(paramValue);
		}
		return defaultValue;
	}
	
	/**
	 * 辅助方法
	 * @param paramValue
	 * @param notNull
	 */
	private static void checkValue(String paramName, String paramValue, boolean notNull) throws ParamCheckException {
		if (notNull && StringUtils.isBlank(paramValue)) {
			throw new ParamCheckException("请传递参数:" + paramName);
		}
	}
	
	/**
	 * 获取int值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static int getIntValue(HttpServletRequest request, String paramName) {
		return getIntValue(request, paramName, -1, false);
	}
	
	/**
	 * 获取int值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static int getIntValue(HttpServletRequest request, String paramName, int defaultValue) {
		return getIntValue(request, paramName, defaultValue, false);
	}
	
	/**
	 * 获取int值
	 * @param request
	 * @param paramName
	 * @param notNull
	 * @return
	 */
	public static int getIntValue(HttpServletRequest request, String paramName, boolean notNull) {
		return getIntValue(request, paramName, -1, false);
	}
	
	/**
	 * 返回字符串,默认返回""
	 * @param request
	 * @param paramName
	 * @return
	 */
	public static String getStringValue(HttpServletRequest request, String paramName) {
		return getStringValue(request, paramName, false);
	}
	
	/**
	 * 获取String值
	 * @param request
	 * @param paramName
	 * @param notNull
	 * @return
	 */
	public static String getStringValue(HttpServletRequest request, String paramName, boolean notNull) throws ParamCheckException {
		return getValue(request, paramName, "", notNull, new WebUtilsCallback<String>(){
			public String doAction(String paramValue) {
				return paramValue;
			}
		});
	}
	
	/**
	 * 获取double值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static double getDoubleValue(HttpServletRequest request, String paramName, double defaultValue) {
		return getDoubleValue(request, paramName, defaultValue, false);
	}
	
	/**
	 * 获取double值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static double getDoubleValue(HttpServletRequest request, String paramName, double defaultValue, boolean notNull) throws ParamCheckException {
		return getValue(request, paramName, defaultValue, notNull, new WebUtilsCallback<Double>(){
			public Double doAction(String paramValue) {
				return Double.valueOf(paramValue);
			}
		});
	}
	
	public static double getDoubleValue(HttpServletRequest request, String paramName,  boolean notNull) throws ParamCheckException {
		return getDoubleValue(request, paramName, -1, notNull);
	}
	
	/**
	 * 获取double值
	 * @param request
	 * @param paramName
	 * @return
	 */
	public static double getDoubleValue(HttpServletRequest request, String paramName) {
		return getDoubleValue(request, paramName, 0);
	}
	
	/**
	 * 获取boolean值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static boolean getBooleanValue(HttpServletRequest request, String paramName, boolean defaultValue) {
		return getBooleanValue(request, paramName, defaultValue, false);
	}
	
	/**
	 * 获取boolean值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @param notNull
	 * @return
	 */
	public static boolean getBooleanValue(HttpServletRequest request, String paramName, boolean defaultValue, boolean notNull) {
		return getValue(request, paramName, defaultValue, notNull, new WebUtilsCallback<Boolean>(){
			public Boolean doAction(String paramValue) {
				if (paramValue.equals("true")) {
					return true;
				} 
				if (paramValue.equals("false")) {
					return false;
				}
				if (paramValue.equals("1")) {
					return true;
				} 
				if (paramValue.equals("0")) {
					return false;
				}
				return false;
			}
		});
	}
	
	/**
	 * 获取long值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @param notNull
	 * @return
	 */
	public static Long getLongValue(HttpServletRequest request, String paramName, long defaultValue, boolean notNull) {
		return getValue(request, paramName, defaultValue, notNull, new WebUtilsCallback<Long>(){
			public Long doAction(String paramValue) {
				return Long.valueOf(paramValue);
			}
		});
	}
	
	/**
	 * 获取long值
	 * @param request
	 * @param paramName
	 * @param notNull
	 * @return
	 */
	public static Long getLongValue(HttpServletRequest request, String paramName, boolean notNull) {
		return getLongValue(request, paramName, -1l, notNull);
	}
	
	/**
	 * 获取long值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @return
	 */
	public static Long getLongValue(HttpServletRequest request, String paramName, long defaultValue) {
		return getLongValue(request, paramName, defaultValue, false);
	}
	
	/**
	 * 获取boolean值
	 * @param request
	 * @param paramName
	 * @return
	 */
	public static boolean getBooleanValue(HttpServletRequest request, String paramName) {
		return getBooleanValue(request, paramName, false);
	}

	
}

    上面是工具类源码,如下是WebUtilsCallback源码:

   

package com.malone.family.util;

public interface WebUtilsCallback<T> {

	T doAction(String paramValue);
}

  

   可能上面代码有点多,下面逐点说明改动及用意:

   具体底层实现,改变前:

           

    @SuppressWarnings("unchecked")  
    public static <T> T getValue(HttpServletRequest request, String paramName, T defaultValue, boolean notNull) throws ParamCheckException {  
        String paramValue = request.getParameter(paramName);  
        checkValue(paramName, paramValue, notNull);  
        if (paramValue != null) {  
            if (defaultValue instanceof Integer) {  
                return (T)(Integer.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Double) {  
                return (T)(Double.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Long) {  
                return (T)(Long.valueOf(paramValue));  
            }  
            if (defaultValue instanceof Float) {  
                return (T)(Float.valueOf(paramValue));  
            }  
            if (defaultValue instanceof String) {  
                return (T)(paramValue);  
            }  
        }  
        return defaultValue;  
    }  

   改变后:

  

	/**
	 * 所有方法的底层实现
	 * @param <T>
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @param notNull
	 * @param action
	 * @return
	 * @throws ParamCheckException
	 */
	public static <T> T getValue(HttpServletRequest request, String paramName, T defaultValue, boolean notNull, WebUtilsCallback<T> action) throws ParamCheckException {
		String paramValue = request.getParameter(paramName);
		checkValue(paramName, paramValue, notNull);
		if (paramValue != null) {
			return action.doAction(paramValue);
		}
		return defaultValue;
	}

   具体到每个返回类型的实现改动(以getLongValue为例):

  

	/**
	 * 获取long值
	 * @param request
	 * @param paramName
	 * @param defaultValue
	 * @param notNull
	 * @return
	 */
	public static Long getLongValue(HttpServletRequest request, String paramName, long defaultValue, boolean notNull) {
		return getValue(request, paramName, defaultValue, notNull, new WebUtilsCallback<Long>(){
			public Long doAction(String paramValue) {
				return Long.valueOf(paramValue);
			}
		});
	}

   getLongValue()和原来的相比,改动的是:在调用getValue方法时,增加了一个参数,一个Callback对象

 

   最主要和最核心的改动就如上所述,改动的出发点和用意:引进Callback模式,把相同的处理逻辑放到具体的底层,不同的逻辑实现回调到具体的方法,

本人感觉这也是callback的好处, 把相同的逻辑封装到同一处,不同的逻辑回调到具体的操作中(此想法源自在看spring源码 HibernateCallback源码)

 

以上是本人的想法和理解,如有不对的地方还请指正!

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值