我正在开发一个 Java web 项目,而不是应用 Spring MVC,Spring web-flow (因为它很简单)。将值从 HTTP 请求附加到 Java 对象时,我遇到了一个小问题。是否有任何独立的库或实用程序支持我们在不使用 Spring 的情况下自动将来自客户端请求的数据绑定到服务器对象(由属性名称匹配)?假设客户端请求中的参数已经构建到地图中。
当我使用 Grails(Groovy 的一个 Web 框架)时,它有一种非常棒的方法来使用:将请求参数中的数据填充到对象object.properties=parameters
,但我不知道在 Java 中,我们是否有类似的机制来实现它?
非常感谢。
问问题
466 次
1 回答
2
Apache Commons 可能对BeanUtilsBean有所帮助。它有很酷的方法,例如getProperty()
and setProperty()
,如果您想尝试使用反射手动编写代码,这可能会有所帮助。还有populate(Object bean, Map properties)
一种方法,我相信它最接近你想要的。
Dozer是一个 java 库,专门用于将东西从一个结构映射到另一个结构。它可能会有所帮助。
这个人在 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;
}
于 2012-11-04T16:51:17.467 回答