【问题标题】:Spring validation issue春季验证问题
【发布时间】:2012-01-24 19:11:20
【问题描述】:

在执行测试用例时,我们在 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.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:226) 在 org.springframework.validation.ValidationUtils.rejectIfEmptyOrWhitespace(ValidationUtils.java:224) 在 org.springframework.validation.ValidationUtils.rejectIfEmptyOrWhitespace(ValidationUtils.java:182)

【问题讨论】:

  • 您确定 IBM RAD IDE 环境已将 User 编译到位?我怀疑它缺少更新的用户。
  • 是的,我想是的。你能详细说明“缺少更新的用户”吗..
  • 我的意思是,您的 RAD 运行时可能没有使用 securityAnswers 编译用户类。我建议做一个完整的清理和重建。
  • 谢谢。我确信他已经编译了,因为相同的代码在部署为应用程序 IDM Websphere 时可以工作。但是,在 RAD IDE 中,测试用例会报告此问题。我想知道这篇文章是否相关..stackoverflow.com/questions/8849042/… ...

标签: spring introspection ibm-jdk


【解决方案1】:

对不起!但我不相信 RAD 与此有关。异常清楚地说明了发生这种情况的原因:

getter的返回类型和setter的参数类型是否匹配?

答案是否定的:)

【讨论】:

  • 谢谢,但如果这是代码级别的问题,我们应该为所有测试抛出类似的异常。这在我的 Springsource IDE 中运行良好。我在想 getter 方法 (readMethod()) 被检查过并且对 setter 方法参数宽松..
  • 我认为问题出在 SecurityAnswers getter 和 setter 中。尝试将 setSecurityAnswers 的参数更改为地图。
  • jira.springsource.org/browse/SPR-8806 jira.springsource.org/browse/SPR-8347 我猜都与这个问题有关.. 但是,我们可以尝试使用相同的匹配读写方法名称
  • 是的尝试一下,我认为应该可以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2015-07-25
  • 2011-10-19
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多