当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

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

发表于: 2013-10-30   作者:abc08010051   来源:转载   浏览:
摘要:      在前面的博客中写了一篇《自己封装的获取web端参数值工具》      当时对具体获取值的逻辑进行的封装和抽象,如下:      @SuppressWarnings("unchecked") public static &

     在前面的博客中写了一篇《自己封装的获取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源码)

 

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

  

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在SNMP4J中操作SNMP协议最重要的一点就是向PDU增加OID,我们可以一次性增加N个OID,如果是GET操作,
在SNMP4J中操作SNMP协议最重要的一点就是向PDU增加OID,我们可以一次性增加N个OID,如果是GET操作,
在SNMP4J中操作SNMP协议最重要的一点就是向PDU增加OID,我们可以一次性增加N个OID,如果是GET操作,
在SNMP4J中操作SNMP协议最重要的一点就是向PDU增加OID,我们可以一次性增加N个OID,如果是GET操作,
在SNMP4J中操作SNMP协议最重要的一点就是向PDU增加OID,我们可以一次性增加N个OID,如果是GET操作,
1.项目包结构如下: 2. spring配置文件springMVC.xml修改如下: <?xml version="1.0" encoding="
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4
主流Java报表工具之王者争夺战:功能大PK系列之图表超链接参数值中文 FineReport报表:已内置cjkenc
安装任何python模块的标准方式是使用标准的python版本,然后添加标准的模块最简单的方法是登陆相应
安装任何python模块的标准方式是使用标准的python版本,然后添加标准的模块最简单的方法是登陆相应
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号