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

Lombok @ToString注解生成@NonNull数组字段异常字符串问题

解决Lombok @ToString注解数组字段输出异常问题

问题场景

使用Lombok的@ToString注解生成类的toString方法时,对于带有双重@NonNull修饰的数组字段:

private @NonNull String @NonNull [] answers;

生成的toString输出并未展示数组实际内容,而是输出了数组对象的默认toString结果:

SongEntryDto(answers=[Ljava.lang.String;@68f7aae2)

解决方案

方案1:自定义字段转换方法(推荐)

在类中添加一个自定义方法,将数组转换为可读字符串,通过@ToString.Include指定该方法替代原字段的输出:

@Getter
@Builder
@ToString
public class SongEntryDto extends EntityDto {
    @ToString.Exclude
    private byte @NonNull [] data;
    private @NonNull String @NonNull [] answers;

    @ToString.Include(name = "answers")
    private String formatAnswers() {
        // 一维数组用Arrays.toString,多维数组用Arrays.deepToString
        return Arrays.toString(answers);
    }
}

方案2:全局配置Lombok数组处理策略

在项目根目录创建lombok.config文件,添加以下配置,让Lombok自动对数组使用深度toString转换:

# 配置toString时对数组使用deepToString输出
lombok.toString.arrayStyle = DEEP

该配置会让Lombok在生成toString方法时,自动调用Arrays.deepToString()处理所有数组类型字段,无需逐个字段配置。

方案3:手动重写toString方法

如果不想依赖Lombok的自动生成逻辑,可直接手动重写toString方法,自行处理数组的输出:

@Getter
@Builder
public class SongEntryDto extends EntityDto {
    @ToString.Exclude
    private byte @NonNull [] data;
    private @NonNull String @NonNull [] answers;

    @Override
    public String toString() {
        return "SongEntryDto{" +
                "answers=" + Arrays.toString(answers) +
                '}';
    }
}

问题原因

Lombok默认的toString生成逻辑,对于带有多重注解(如双重@NonNull)修饰的数组字段,未能正确识别其数组类型,因此未调用数组专用的toString处理逻辑,而是直接使用了Object.toString(),导致输出数组的哈希码形式。

内容的提问来源于stack exchange,提问作者sixqf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:45