2014-10-06 19 views
1

我正在尝试使用hashmap为我的bean调用所有setter方法。关键是属性名称,值是我需要通过调用setter来设置的实际值。 Follwoing代码完全适用于字符串proerties但未能在如int非字符串属性,翻番等Java Bean Utils调用所有非String类型的设置器

 for(Map.Entry<String, String> entry : settings.entrySet()){ 
     try{ 
        key = entry.getKey(); 
        PropertyUtils.setProperty(bean, key, entry.getValue()); 
     } 
     catch(Exception ex) 
     { 
      LOGGER.debug("failed...."+ex.getMessage());  
     } 
    } 

上面的代码抛出异常的如int /双等

failed....Cannot invoke setter on bean class - argument type mismatch - had objects of type "java.lang.String" but expected signature "int" 

failed....Cannot invoke setter on bean class - argument type mismatch - had objects of type "java.lang.String" but expected signature "double" 

的问题是,非字符串字段:如何避免这种情况,如何成功调用setter,而无此异常。

+1

那么,是什么问题? – hooknc 2014-10-06 23:39:26

+0

编辑问题的详细信息。 TNX – ATHER 2014-10-07 14:13:49

回答

2

你的代码的事情是你的Map.Entry被加载为一个双字符串元组,所以当传递给setProperty的值是一个String你要发送的字符串,甚至当该方法需要一个int或float或任何。

没有测试过这一点,但你可以给它一个尝试

for(Map.Entry<String, String> entry : settings.entrySet()){ 
    try{ 
       key = entry.getKey(); 
       Class propertyClass = PropertyUtils.getPropertyDescriptor(bean, key).getPropertyType(); 
       if (propertyClass.getName().equals('Integer')) { 
        PropertyUtils.setProperty(bean, key, Integer.parseInt(entry.getValue())); 
       } // and so with other types. 
    } 
    catch(Exception ex) 
    { 
     LOGGER.debug("failed...."+ex.getMessage());  
    } 
} 
相关问题