2014-10-06 17 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());  
    } 
} 
相關問題