Java实体类是严格遵循JavaBean规范的POJO:必须有public无参构造器、所有字段private、getter/setter命名标准且public、不包含业务逻辑、建议实现Serializable并声明serialVersionUID。

Java 实体类(即规范的 JavaBean)不是随便写的 POJO,而是要严格遵循一套被框架、工具和团队广泛认可的约定。写对了,Spring 才能自动注入、Jackson 才能正确序列化、IDE 才能智能提示、EL 表达式才能在 JSP 或模板中直接调用。
必须有 public 无参构造器
这是反序列化、反射实例化的基础。哪怕你只用有参构造器初始化对象,也得显式写上无参构造器。
- ✅ 正确:public Person() {}
- ❌ 错误:只写了 public Person(String name) {},没提供无参构造器
- ⚠️ 注意:不能是 private Person() 或 protected Person(),必须是 public
字段全用 private,getter/setter 必须标准命名
字段封装是核心,方法命名不是“看着像就行”,而是有明确规则,否则内省(Introspection)会失败。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 字段 private String userName; → getter 是 public String getUserName(),setter 是 public void setUserName(String userName)
- 字段 private boolean enabled;(基本类型)→ getter 推荐用 public boolean isEnabled(),不是 getEnabled()
- 字段 private Boolean isValid;(包装类型)→ getter 必须是 public Boolean getIsValid(),不能用 isValid()
- 所有 getter/setter 方法都必须是 public,且参数/返回值类型与字段严格一致
不掺业务逻辑,只做数据容器
JavaBean 的本质是“数据搬运工”,不是“业务处理器”。校验、日志、计算、远程调用这些,都不该出现在它的方法里。
立即学习“Java免费学习笔记(深入)”;
- ✅ 合理:setName(String name) { this.name = name; }
- ❌ 不规范:setName(String name) { validate(name); log.info("set name: " + name); this.name = name; }
- 校验应交给 Spring Validation、DTO 验证器或 Service 层统一处理
- getter 中禁止触发副作用,比如懒加载、网络请求或修改其他字段
建议实现 Serializable 并声明 serialVersionUID
只要这个类可能被序列化(如 Redis 缓存、RMI、HTTP Session 存储),就该加上这个接口和版本号。
- 加上 implements Serializable
- 显式声明 private static final long serialVersionUID = 1L;(IDE 可自动生成哈希值,更稳妥)
- 不加的话,JVM 会自动生成一个动态 UID,类结构稍有变动就会导致反序列化失败

















