Java 使用PropertyUtils.setProperty时,类中没有setter方法
当我尝试使用ApacheBeanutils在我的bean中设置日期属性时,由于“类中没有setter方法”而失败。未正确设置非日期属性 以下代码失败,属性“availableFrom”在类“class com.brightgreenstar.entities.CapitalAset”中没有setter方法Java 使用PropertyUtils.setProperty时,类中没有setter方法,java,apache-commons-beanutils,Java,Apache Commons Beanutils,当我尝试使用ApacheBeanutils在我的bean中设置日期属性时,由于“类中没有setter方法”而失败。未正确设置非日期属性 以下代码失败,属性“availableFrom”在类“class com.brightgreenstar.entities.CapitalAset”中没有setter方法 if (value instanceof String){ if ((key.equals("lastUpdatedDate")) || (key.equals("availableF
if (value instanceof String){
if ((key.equals("lastUpdatedDate")) || (key.equals("availableFrom")) || (key.equals("availableTo"))|| (key.equals("purchaseDate"))) {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss ZZZZ");
Date date = df.parse((String)value);
PropertyUtils.setProperty(asset,key,date);
// PropertyUtils.setSimpleProperty(asset,key,value); // Also fails for dates
}else{
PropertyUtils.setSimpleProperty(asset,key,value);
}
} else{
PropertyUtils.setSimpleProperty(asset,key,value);
}
如果我不使用PropertyUtils来更新日期属性,只需直接调用setter(例如,asset.setAvailableFrom
),那么它就可以正常工作。这对我来说是可行的解决方案,但我更喜欢使用PropertyUtils
if (value instanceof String){
if ((key.equals("lastUpdatedDate")) || (key.equals("availableFrom")) || (key.equals("availableTo"))|| (key.equals("purchaseDate"))) {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss ZZZZ");
Date date = df.parse((String)value);
if (key.equals("availableFrom")){
asset.setAvailableFrom(date); // This works
}
}else{
PropertyUtils.setSimpleProperty(asset,key,value);
}
}else{
PropertyUtils.setSimpleProperty(asset,key,value);
}
谢谢你的建议
CapitalAset bean:
public class CapitalAsset {
private Date availableFrom;
private Date availableTo;
public String getAvailableFrom(){
try {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z");
return df.format(availableFrom);
} catch (Exception e) {
return "";
}
}
public void setAvailableFrom(Date availableFrom) {
this.availableFrom = availableFrom;
}
public String getAvailableTo(){
try {
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z");
return df.format(availableTo);
} catch (Exception e) {
return "";
}
}
public void setAvailableTo(Date availableTo) {
this.availableTo = availableTo;
}
}
需要包含一个返回日期的getter:
public Date getAvailableFrom(){
return availableFrom;
}
is
com.brightgreenstar.entities.capitalaset
包含availableFrom
或其超类?getter foravailableFrom
返回字符串
,但setter接受日期
,因此该类无法正确内省,分配失败。capitalaset包含availableFrom。为我的问题增加了细节。但再看看我的代码,我想问题可能是我的getter并没有返回日期。我将改变它并再次测试。谢谢@sashasalau您即将测试它。