2012-11-04 38 views
0

我正在开发一个Java Web项目,而不是将Spring MVC,Spring web-flow应用到它(因为它非常简单)。将HTTP请求的值附加到Java对象时,我遇到了一个小问题。是否有任何独立的库或实用程序支持我们将数据从客户端请求自动绑定到服务器对象(通过属性名称匹配)而不使用Spring?假设客户端请求中的参数已经构建到地图中。
当我使用Grails(Groovy的Web框架)时,它通过使用:object.properties=parameters将请求参数中的数据填充到对象的方法非常棒,但我不知道在Java中,我们是否有类似的机制执行它?
非常感谢。没有Spring MVC的自动数据绑定Java对象

+1

我不明白你的理由不使用Spring。在我看来,这正是你想用于这样的事情。 –

回答

2

Apache Commons可能会帮助BeanUtilsBean。它有很酷的方法,如getProperty()setProperty(),这可能会有所帮助,如果你想尝试手动使用反射代码。还有populate(Object bean, Map properties)方法,我相信这是最接近你想要的。

Dozer是一个java库,专门用于将东西从一个结构映射到另一个结构。它可能有帮助。

This guy张贴在coderanch了类似的问题,并在进行一些讨论后,他想出了以下内容:

public static <T extends Object> T setFromMap(Class<T> beanClazz, HashMap<String, String> propValues) throws Exception 
{ 
    T bean = (T) beanClazz.newInstance(); 
    Object obj = new Object(); 
    PropertyDescriptor[] pdescriptors = null; 
    BeanInfo beanInfo = Introspector.getBeanInfo(beanClazz); 
    pdescriptors = beanInfo.getPropertyDescriptors(); 
    for(int i=0; i<pdescriptors.length; i++) 
    { 
     String descriptorName = pdescriptors[i].getName(); 
     if(!(descriptorName.equals("class"))) 
     { 
      String propName = descriptorName; 
      String value = (String) propValues.get(propName); 
      if(value != null) 
      { 
       Object[] objArray = new Object[1]; 
       objArray[0] = value; 
       Method writeMethod = pdescriptors[i].getWriteMethod(); 
       writeMethod.invoke(bean, objArray); 
      } 
     } 
    } 
    return bean; 
}