最直接的方式是使用 @tostring.exclude 注解标记敏感字段,该注解会完全跳过字段打印,支持任意类型且不影响其他 lombok 注解;也可用 @tostring(onlyexplicitlyincluded = true) 配合 @tostring.include 精确控制输出字段。

在 Lombok 的 @ToString 中排除敏感字段,最直接的方式是使用 @ToString.Exclude 注解标记该字段。
用 @ToString.Exclude 排除单个字段
这是最常用、最清晰的做法。只需在不想出现在 toString 输出中的字段上添加 @ToString.Exclude:
- 该注解会完全跳过该字段的打印,无论其值是否为 null 或空字符串
- 支持任意类型字段(String、int、对象、集合等)
- 不影响其他 Lombok 注解(如
@Data、@Getter)的正常行为
示例:
@Data
public class User {
private String name;
private String email;
@ToString.Exclude
private String password; // 不会出现在 toString 结果中
@ToString.Exclude
private String idCard; // 同样被排除
}
调用 new User("Alice", "a@example.com", "123456", "110...").toString() 输出类似:User(name=Alice, email=a@example.com)
用 @ToString.Include 控制只包含指定字段
如果需要更精细的控制(比如只显示几个关键字段),可配合 @ToString(onlyExplicitlyIncluded = true) 和 @ToString.Include:
- 设置
onlyExplicitlyIncluded = true后,只有显式标注@ToString.Include的字段才会参与输出 - 未标注的字段(包括敏感字段)默认被忽略,无需逐个加
Exclude - 适合字段较多、仅需展示少数核心信息的场景
示例:
@ToString(onlyExplicitlyIncluded = true)
@Data
public class User {
@ToString.Include
private String name;
@ToString.Include
private String email;
// password 和 idCard 默认不出现
private String password;
private String idCard;
}
注意:@ToString 不处理序列化或日志脱敏
@ToString 只影响 toString() 方法生成逻辑,和运行时日志、JSON 序列化无关:
- Logback/Log4j 打印对象仍会触发
toString(),所以Exclude对日志有效 - 但 Jackson 序列化时不会读取 Lombok 注解,需额外配置(如
@JsonIgnore或@JsonInclude) - 若字段含敏感数据,建议在 DTO 层做映射隔离,而非仅靠
@ToString.Exclude
不推荐:用 @ToString(of = {...}) 手动列举
虽然支持 @ToString(of = {"name", "email"}) 显式指定字段列表,但维护成本高:
- 新增字段需同步更新
of数组,易遗漏 - 无法动态排除(比如某字段在某些环境下才敏感)
- 不如
@Exclude直观且符合单一职责原则
仅当字段极少且长期稳定时可考虑,一般场景优先选 @ToString.Exclude。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











