对于bean的属性想必大家都很熟悉,一般都是通过get、set方法进行封装,然后暴露给外界调用。但是在给属性命名时还是除去命名规范有两点需要注意的,以下两点在前端传值的时候会特别容易出错
1、Boolean 类型的字段不能以is开头
Boolean 类型在生成get和set方法时和别的类型不太一样,Boolean的get方法是isXXX、或getXXX或者把is去掉getXXX,在生成set方法时会把变量名前的is去掉,然后在生成setXXX方法,比如isDeleted字段,get方法就是IsDeleted或者getIsDeleted、或者getDeleted,而set方法是setIsDeleted或者setDeleted。
2、属性名称首字母不能大写
在生成get和set方法时就是把首字母大写,然后加上get和set,也就是说get和set后面的字段才是真正的属性,这样前端传来的值也很可能接收不到。
下面通过反射来说明get和set后面的字段才是真正的属性
UserEntity.java
//@Data public class UserEntity { private Boolean isDeleted; private String Username; private String password; public Boolean getDeleted() { return isDeleted; } public void setDeleted(Boolean deleted) { isDeleted = deleted; } public String getUsername() { return Username; } public void setUsername(String username) { Username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
get、set方法是通过idea生成的
PropertyTest.java
public class PropertyTest { public static void main(String[] args) throws IntrospectionException, InvocationTargetException, IllegalAccessException { UserEntity userEntity1 = new UserEntity(); Class<? extends UserEntity> aClass = userEntity1.getClass(); BeanInfo beanInfo = Introspector.getBeanInfo(aClass); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { if (propertyDescriptor != null) { String displayName = propertyDescriptor.getDisplayName(); // 属性名称 if (!"class".equals(displayName)) { Method readMethod = propertyDescriptor.getReadMethod(); // get 方法 Method writeMethod = propertyDescriptor.getWriteMethod(); // set方法 System.out.println("属性名:"+displayName); if (readMethod != null) { System.out.println("get方法:"+ readMethod.getName()+","+readMethod.invoke(userEntity1)); } if (writeMethod != null) { System.out.println("set方法="+writeMethod.getName()); } } } } } }
结果:
属性名:deleted get方法:getDeleted set方法=setDeleted 属性名:password get方法:getPassword set方法=setPassword 属性名:username get方法:getUsername set方法=setUsername
结果是不是UserEntity里面的属性不一样,在UserEntity里deleted是isDeleted,username是Username。所以说get和set方法之后的才是真正的属性,get和方法生成的规则不一样,前端传值过来的时候就有很大可能接收不到值,所以属性命名的时候要特别注意。
PropertyDescriptor 是一个属性描述器,可以获取一个bean的属性、读方法和写方法。
能力有限,水平一般,如有错误,请多指出。