带有下划线 (_) 的 Java BeanUtils 未知属性

我无法从使用 的类中获取带下划线的属性(例如:User_Name)BeanUtils.getProperty(bean, property),它总是抛出错误:

“类‘User’上的未知属性‘User_Name’”。

但是当我调试 bean 时,它具有 User_Name 属性。

BeanUtils.getProperty(bean, propertyName);

用户类是

public class User {

    private String ID;

    private String User_Name;


    public void setID(String ID) {

        this.ID = ID;

    }


    public String getUser_Name() {

        return this.User_Name;

    }


    public void setUser_Name(String user_Name) {

        this.User_Name = user_Name;

    }

}


繁华开满天机
浏览 178回答 1
1回答

侃侃尔雅

这是命名约定的问题。...因此,当我们从现有 Java 名称的中间提取属性或事件名称时,我们通常会将第一个字符转换为小写*case 1。然而,为了支持偶尔使用所有大写名称,我们检查名称的前两个字符*case 2是否都是大写,如果是,就不要管它。例如,'FooBah' 变成 'fooBah''Z' 变成 'z''URL' 变成 'URL'我们提供了一个 Introspector.decapitalize 方法来实现这个转换规则因此,对于您给定的类,根据 *case1推导出的属性是“user_Name”getUser_Name()而不是“User_Name”。setUser_Name()并且getProperty(bean, "ID")根据 *case 2 进行调用。为解决该问题,请根据Java 命名规范更新命名,属性和方法应以小写字母开头,并使用camelCase而不是snake_case来分隔单词。请记住,遵循约定在编程中非常重要。下面以更新后的类为例。import java.lang.reflect.InvocationTargetException;import org.apache.commons.beanutils.BeanUtils;public class User {    private String ID;    private String userName;    public String getID() {        return ID;    }    public void setID(String ID) {        this.ID = ID;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public static void main(String[] args)            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {        User bean = new User();        bean.setUserName("name");        System.out.println(BeanUtils.getProperty(bean, "userName"));    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java