带有@ToString.Exclude 的Lombok 排除字段不起作用

Posted

技术标签:

【中文标题】带有@ToString.Exclude 的Lombok 排除字段不起作用【英文标题】:Lombok excluding field with @ToString.Exclude is not working 【发布时间】:2019-05-22 19:01:57 【问题描述】:

我正在使用 Lombok 删除样板代码。我正在尝试将实体打印到控制台,但出现 ***Error。该实体与另一个实体有双向关系,所以我想从 toString 方法中排除这个实体。

我的实体如下所示:

@Entity
@Data
public class Foo 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long fooId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "barId")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    private Bar bar; 

这是我第一次尝试使用@ToString.Exclude,但它似乎并没有表现出来。我使用不正确吗?当我在 Foo 对象上调用 toString 时,我只想打印出 fooIdname

编辑

我熟悉从*** @ToString 注释中排除或包含字段的替代方法。我试图避免这种情况。我只想在类级别使用@Data,并注释应该排除的字段。

编辑 2

仍在简化类上进行复制。龙目岛版本 1.18.8。

【问题讨论】:

检查这个。 ***.com/questions/42649564/… 我不认为@ToString.Exclude 独立于@ToString 工作。通过文档进行检查。 projectlombok.org/api/lombok/ToString.html @SubirKumarSao 感谢您的回复。将 @Data 替换为 @ToString 并不能解决问题。 我们使用的版本 (1.16) 与 @ToString(exclude="bar") 配合使用 @TheGilbertArenasDagger @Data 包括 @ToString 所以你很擅长那个部分。 【参考方案1】:

为我工作。 lombok:1.18.8

import lombok.Data;
import lombok.ToString;

@Data
public class MyClass 
    public static void main(String args[]) 
        MyClass myClass = new MyClass();
        System.out.println("ToString::" + myClass);
    

    private String a = "ABC";

    @ToString.Exclude
    private String b = "DEF";


输出:ToString::MyClass(a=ABC)

【讨论】:

感谢您的发帖和 +1。我在 1.18.6 但升级时问题仍然存在。我删除了所有 JPA 注释,问题仍然存在。嗯.... 您是否更新了 eclipse Lombok 插件和项目依赖项,并清理/重建了项目?【参考方案2】:

@ToString 接受参数exclude,可用于从字符串中排除字段。

@ToString(exclude = "bar")

@Entity
@ToString(exclude = "bar")
public class Foo 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long fooId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "barId")
    @EqualsAndHashCode.Exclude
    private Bar bar; 

【讨论】:

【参考方案3】:

您必须更新安装在 Eclipse 中的 lombok(下载新的 lombok.jar,运行 java -jar lombok.jar 并重新启动 Eclipse)。至少这对我来说解决了。

【讨论】:

【参考方案4】:
lombok : 1.18.12

@Exclude 对我有用。 @Exclude 只不过是 @ToString.Exclude 而已。 @Exclude 注解在@ToString 注解中定义。

@Entity
@Data
public class Foo 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long fooId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "barId")
    @EqualsAndHashCode.Exclude
    @Exclude
    private Bar bar; 

【讨论】:

【参考方案5】:

在 Kotlin 中

您可以避免使用 Lombok 库并定义自定义注释 @ExcludeToString 以排除冗余参数或您需要的参数。

GL

【讨论】:

以上是关于带有@ToString.Exclude 的Lombok 排除字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章

IDEA安装使用Lombox插件

IDEA安装使用Lombox插件

Lombok的安装及入门

Java企业级电商项目实战 Tomcat集群与Redis分布式

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题