Java 使用PropertyUtils.setProperty时,类中没有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

当我尝试使用ApacheBeanutils在我的bean中设置日期属性时,由于“类中没有setter方法”而失败。未正确设置非日期属性

以下代码失败,属性“availableFrom”在类“class com.brightgreenstar.entities.CapitalAset”中没有setter方法

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 for
availableFrom
返回
字符串
,但setter接受
日期
,因此该类无法正确内省,分配失败。capitalaset包含availableFrom。为我的问题增加了细节。但再看看我的代码,我想问题可能是我的getter并没有返回日期。我将改变它并再次测试。谢谢@sashasalau您即将测试它。