使用Lombok SuperBuilder构建对象时如何避免生成Null属性?
解决Lombok SuperBuilder构建对象时隐藏Null值属性的问题
首先明确:Java类中声明的成员变量在对象实例化后必然存在,无法真正“不生成”未赋值的属性(默认值为null)。你想要的效果本质是在输出或序列化时隐藏值为null的属性,以下是两种可行方案:
方案1:自定义toString方法,跳过Null值属性
Lombok的@Data默认生成的toString()会包含所有属性,不管是否为null。可以手动实现toString()方法,只拼接非null的属性:
@Data @SuperBuilder public class StudentReq { private String name; private String email; private String DOB; @Override public String toString() { StringBuilder sb = new StringBuilder("StudentReq("); boolean isFirst = true; if (name != null) { sb.append("name=").append(name); isFirst = false; } if (email != null) { if (!isFirst) sb.append(", "); sb.append("email=").append(email); isFirst = false; } if (DOB != null) { if (!isFirst) sb.append(", "); sb.append("DOB=").append(DOB); } sb.append(")"); return sb.toString(); } }
这样调用build()后,toString输出就只会显示name和DOB,不会出现email=null。
方案2:序列化时排除Null值(如转JSON场景)
如果是需要将对象序列化为JSON时隐藏null属性,可以使用Jackson的@JsonInclude注解:
import com.fasterxml.jackson.annotation.JsonInclude; @Data @SuperBuilder @JsonInclude(JsonInclude.Include.NON_NULL) public class StudentReq { private String name; private String email; private String DOB; }
此时将对象转为JSON时,只会包含非null的属性,符合你期望的结构。
注意:你的代码示例中存在类名不一致(
Student和StudentReq),实际使用时需统一类名。
内容的提问来源于stack exchange,提问作者Clueless_Coder
相关产品推荐
相关产品推荐

