Welcome 微信登录

首页 / 软件开发 / JAVA / DWR的Converter实现原理简单分析及应用

DWR的Converter实现原理简单分析及应用2011-09-14 unmi 隔叶黄莺我们在应用 DWR 调用远程方法时涉及到 JS 与 JAVA 之间参数和返回值的数据转换,例如:

JS 的 123 与 Java 的 int或 Integer、long 间的转换

JS 的 "2009-06-23" 与 Java 的 java.util.Date 之间的转换

JS 的 "[1,2,3]" 与 Java 的 int[] 间的转换

JS 的 "{id:123, name: "Unmi"}" 与 Java 的 Class Person{int id; String name} 间的转换

或者更复杂的嵌套类型( "{id:123, name: "Unmi", blogs: ["http://unmi.blogjava.net","http://blog.csdn.net/kypfos"]}" ) 与 Java 类型间的转换,等等。 那么这一切是怎么进行的呢?其实我们见识过很多组件的类型映射,如 Java 的 PropertyEditor、 Hibernate(UserType)、iBatis(TypeHandler) 的类型映射,Struts1/2 中 Form/Model 用的 Converter 等。

这里我来稍稍分析 DWR 的 Converter 实现,以及说明如何定制自己的 Converter。本文所用 DWR 是 2.0.5 版。

1. DWR 内置的 Converter 及应用类型

名称应用类型转换器
nullvoid,java.lang.VoidNullConverter
enum EnumConverter
primitiveboolean,byte,short,int,
long,float,double,char,java.lang.Boolean,java.lang.Byte,
java.lang.Short,

java.lang.Integer,java.lang.Long,
java.lang.Float,

java.lang.Double,java.lang.Character

PrimitiveConverter
bignumberjava.math.BigInteger,java.math.BigDecimalBigNumberConverter
stringjava.lang.StringStringConverter
array[Z,[B,[S,[I,[J,[F,[D,[C,[L*ArrayConverter
mapjava.util.MapMapConverter
collectionjava.util.CollectionCollectionConverter
datejava.util.Date,java.sql.Date,
java.sql.Time,java.sql.Timestamp,
java.util.Calendar

DateConverter
domorg.w3c.dom.Node,org.w3c.dom.Element,
org.w3c.dom.Document
DOMConverter
dom4jorg.dom4j.Document,org.dom4j.Element,
org.dom4j.Node
DOM4JConverter
jdomorg.jdom.Document,org.jdom.ElementJDOMConverter
xomnu.xom.Document,nu.xom.Element,
nu.xom.Node
XOMConverter
servletjavax.servlet.ServletConfig,
javax.servlet.ServletContext,javax.servlet.http.HttpServletRequest,

javax.servlet.http.HttpServletResponse,

javax.servlet.http.HttpSession

ServletConverter
bean BeanConverter
object ObjectConverter
hibernate2 H2BeanConverter
hibernate3 H3BeanConverter
urljava.net.URLURLConverter
exception ExceptionConverter
miniExceptionjava.lang.ThrowableMinimalistExceptionConverter