【问题标题】:Auto data-binding Java object without Spring MVC没有 Spring MVC 的自动数据绑定 Java 对象
【发布时间】:2012-11-04 16:24:32
【问题描述】:

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

【问题讨论】:

  • 我不明白你不使用 Spring 的原因。在我看来,这正是您想要用于这样的事情的东西。

标签: java data-binding spring-mvc


【解决方案1】:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2018-12-22
    • 2013-01-17
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多