Java Beans、BeanUtils 和 Boolean 包装器类

标签 java jaxb javabeans apache-commons-beanutils

我正在使用 BeanUtils 来操作通过 JAXB 创建的 Java 对象,我遇到了一个有趣的问题。有时,JAXB 会像这样创建一个 Java 对象:

public class Bean {
    protected Boolean happy;

    public Boolean isHappy() {
        return happy;
    }

    public void setHappy(Boolean happy) {
        this.happy = happy;
    }
}

下面的代码工作得很好:

Bean bean = new Bean();
BeanUtils.setProperty(bean, "happy", true);

但是,试图获取 happy像这样的属性:

Bean bean = new Bean();
BeanUtils.getProperty(bean, "happy");

此异常的结果:

Exception in thread "main" java.lang.NoSuchMethodException: Property 'happy' has no getter method in class 'class Bean'

将所有内容更改为原始 boolean允许 set 和 get 调用工作。但是,我没有此选项,因为这些是生成的类。我认为发生这种情况是因为 Java Bean 库只考虑 is<name>。如果返回类型是原始类型,则表示属性的方法 boolean ,而不是包装器类型 Boolean .有没有人建议如何通过 BeanUtils 访问这些属性?我可以使用某种解决方法吗?

最佳答案

最后我找到了法律确认:

8.3.2 Boolean properties

In addition, for boolean properties, we allow a getter method to match the pattern:

public boolean is<PropertyName>();

来自 JavaBeans 规范。你确定你没遇到过JAXB-131错误?

关于Java Beans、BeanUtils 和 Boolean 包装器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5266531/

相关文章:

java - Netty 服务器的请求和响应挂起

Java - 创建多个 HashMap 并使用 for 循环填充它们 - 有更好的方法吗?

java - 如何停止 Marshaller 类在我的输出文件中添加 XML 标记

java - 如何重新排序节点元素,使其与 xsd :sequence order? 匹配

java - BeanIo 没有此类属性 'property' 问题

java - 无法正确获取 spring-security.xml

java - long.class 和 Long.class 有什么不同?

java - 无法完成星球大战名称生成器的此代码

java - 从没有模式的 xml 创建 Jaxb 类

java - 如何将多个字符串值添加到 ArrayList?