在前面的博客中写了一篇《自己封装的获取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源码)
以上是本人的想法和理解,如有不对的地方还请指正!
相关推荐
- 本文介绍了如何使用这些工具来探索WebCore中C++类的继承关系。 - **操作步骤**: - 使用IDA反汇编WebCore的二进制文件。 - 利用LLDB动态调试WebCore运行时的状态。 - 分析类的继承结构和成员函数。 #### 第...
jQuery作为一款流行的JavaScript库,自从2006年发布以来,一直在Web开发中占据着重要的地位。通过它的核心函数和方法,开发者可以更简洁、高效地操作DOM、处理事件、进行动画效果的制作以及实现Ajax交互等。由于...
Freespee提供实时通话数据、通话跟踪和分析,帮助开发者获取用户通话行为的详细信息。通过集成Freespee,开发者可以深入了解用户的行为,从而优化用户体验,提高转化率。 集成Freespee到Laravel项目的第一步是安装...
最后,使用HttpClient的execute方法发送请求,并获取HttpResponse对象以处理响应。 在实际应用中,HTTPClient库的高级特性包括: 1. **多路复用**:HTTP/2协议支持多路复用,允许多个HTTP请求共享一个TCP连接,...
7. **错误处理**:在Node.js中,错误通常通过回调函数的第一个参数传递,或者使用`try...catch`语句捕获。此外,`unhandledRejection`和`process.error`事件可以帮助检测未处理的Promise错误。 8. **性能优化**:...
在本文中,我们将深入探讨如何使用Node.js作为后端服务器,并结合Bing Maps API来实现获取实时路况信息和行程时间的功能。首先,我们要明白Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用...
4. 函数引用作为默认参数值:函数现在可以接受另一个函数作为默认参数,这增加了代码的灵活性,例如`function foo(callable $callback = null) {}`。 5. 特性(Attributes):PHP7.4引入了一种新的元数据表示方式...
- **异步模式**:使用Future和Callback实现非阻塞的HTTP请求。 - **多线程支持**:在高并发环境下,可以通过多线程并发处理请求。 在Apache HttpClient的jar包中,`RELEASE_NOTES.txt`包含了版本更新的历史记录和...
3. **事件绑定**:通过`on(eventName, callback)`方法绑定事件处理器,例如`on('change', function(values) {...})`监听值变化。 四、实践应用 1. **基本使用**:在HTML中创建一个`<select>`元素,添加`multiple`...
最后,我们需要注意的是,虽然"beneverard-jqPagination"是一个强大的工具,但它并不处理数据的获取和处理。在实际应用中,我们需要配合服务器端接口或前端数据模拟来获取和展示数据。例如,你可以使用AJAX异步请求...
《jQuery 1.8.0中文手册》是针对JavaScript库jQuery 1.8.0版本的详尽参考资料,旨在帮助开发者充分利用这一强大的工具。jQuery是一个轻量级、高性能的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画制作...
4. **属性操作(Attributes)**:可以使用`$(selector).attr('attributeName')`获取属性值,`$(selector).attr('attributeName', 'value')`设置属性值,或者`$(selector).removeAttr('attributeName')`移除属性。...
1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 1.6.3 UltraEdit 21 1.6.4 EditPlus 22 1.6.5 支持PHP的IDE环境 22 1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 ...
jQuery,一个轻量级的JavaScript库,因其简洁的API和强大的功能,成为Web开发中广泛使用的工具。它极大地简化了HTML文档遍历、事件处理、动画制作以及Ajax交互等任务,使得JavaScript编程变得更加简单。本篇文章将...
Callback函数是早期处理异步的常见方式,它将函数作为参数传递,当异步操作完成时执行。Event Loop是JavaScript异步模型的核心,它负责调度回调函数的执行顺序。Web Workers允许在后台线程中运行脚本,处理大量计算...
1. **CAS Version 2.0**:CAS 2.0是较新的版本,提供了更多的功能和改进的安全性。 综上所述,Acegi Security是一个功能强大且高度可配置的安全管理工具,它支持多种认证机制和授权策略,可以满足不同类型应用程序...
OpenAPI 3.0是对2.0版本的升级,引入了多项改进和新特性,以适应现代Web API设计的需求。 在OpenAPI 3.0中,主要包含以下几个核心概念和特点: 1. **信息对象(Info Object)**:这是API的基本元数据,包括API的...