You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:13