带有@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 时,我只想打印出 fooId
和 name
。
编辑
我熟悉从*** @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 排除字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Java企业级电商项目实战 Tomcat集群与Redis分布式
带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName