标准化pojo需严格遵循javabean规范:私有属性(优先包装类型)、显式无参构造器、public getter/setter(布尔类型用isxxx)、重写tostring/equals/hashcode、实现serializable,并用不可变集合保护容器字段。

Java 封装属性命名不规范,核心是破坏了 JavaBean 规范,容易导致框架(如 Spring、Jackson、MyBatis)在反射、序列化、依赖注入时出错。修改的关键不是“改名字就行”,而是要同步调整字段名、getter/setter 方法名,并确保与外部配置(如 XML、JSON 字段映射、数据库列名)保持一致。
布尔类型字段避免以 is 开头
这是最常见也最容易被忽略的问题。比如定义 private boolean isDeleted;,IDEA 自动生成的 getter 是 isDeleted(),但框架按 JavaBean 规范会把方法名 isDeleted 去掉前缀 is 后,认为对应属性名是 deleted,而不是 isDeleted —— 导致注入失败或 JSON 反序列化为 null。
- 正确做法:字段名用 deleted,getter 写成 isDeleted(),setter 写成 setDeleted(boolean deleted)
- 强制使用包装类 Boolean 而非 boolean,避免基本类型默认值干扰逻辑
- XML 配置中
<property name="deleted"></property>,不能写成name="isDeleted"
普通属性严格遵循 lowerCamelCase
属性名必须小驼峰,首单词全小写且长度 >1,后续单词首字母大写。错误示例:userID、XmlHandler、mPhone、get_url。
- userID → 改为 userId(U 大写违反规则;ID 是缩写,统一用 Id 更规范,即 userId)
- XmlHandler → 属性名不能大驼峰,应为 xmlHandler;类名才用 XmlHandler
-
mPhone → 前缀
m(表示 member)是 Android 风格,Java 通用开发中不推荐,直接用 phone 或 mobilePhone - getter/setter 必须严格匹配:字段 userAddress → getUserAddress() / setUserAddress(String)
检查并统一 getter/setter 签名
IDE 自动生成的方法可能和字段名不一致,尤其在重命名字段后未同步更新方法。手动检查三者是否闭环:
- 字段名:accountStatus
- getter:getAccountStatus()(不能是
isAccountStatus(),除非字段是布尔型且已按上一条规范命名) - setter:setAccountStatus(String status)
- 若字段是布尔型,getter 必须是 isXxx() 形式,但字段名仍为 xxx(如 active → isActive())
配合框架做映射适配
当无法修改已有字段名(如历史遗留或需兼容旧接口),可通过注解显式指定映射关系:
- Jackson:用
@JsonProperty("is_active")标在字段或 getter 上 - MyBatis:在
<resultmap></resultmap>中用property="active"对应column="is_active" - Lombok:避免用
@Data自动生成布尔字段的 getter,改用@Getter @Setter并手动控制方法名 - Spring Boot 配置类:用
@ConfigurationProperties(prefix = "app")时,确保 yml 中键名符合 lowerCamelCase(如app.enable-cache对应字段 enableCache)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











