在执行测试用例时,我们在 IBM RAD IDE 环境(IBM JDK 1.6 作为运行时 JRE)中面临一个问题。相同的代码在 Springsource IDE 中运行良好(Sun JDK 1.6 作为运行时 JRE)。这是JDK还是Spring框架的问题。简要代码历史:有一个java bean如下
class User {
final Map<Integer,String> securityQuestions = Collections.synchronizedMap(new HashMap<Integer,String>(MAX_SECURITY_QUESTIONS));
final Map<Integer,String> securityAnswers = Collections.synchronizedMap(new HashMap<Integer,String>(MAX_SECURITY_QUESTIONS));
public Map<Integer,String> getSecurityAnswers() {
return securityAnswers;
}
public void setSecurityAnswer(Integer answerNumber, String answerText) {
securityAnswers.put(answerNumber, answerText);
}
}
当我们尝试使用验证“securityAnswers”时
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "securityAnswers", "seqQans.obj.required","security Question list cannot be empty");
我们得到了这个例外。
原因:org.springframework.beans.NotReadablePropertyException:bean 类 [User] 的无效属性“securityAnswers”:Bean 属性“securityAnswers”不可读或具有无效的 getter 方法:getter 的返回类型是否与参数类型匹配二传手?在 org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:705) 在 org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:697) 在 org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99) ) 在 org.springframework.validation.ValidationUtils.rejectIfEmptyOrWhitespace(ValidationUtils.java:224) 在 org.springframework 的 org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:226)。