【发布时间】:2023-04-04 18:19:02
【问题描述】:
我有一个带有默认方法的接口:
public interface Book {
String getTitle();
default String getSentenceForTitle() {
return "This book's title is " + getTitle();
}
}
...我有一个 JPA @Entity 实现这个接口:
@Entity
public class JpaBook implements Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
// ...
@Override
public String getTitle() {
return title;
}
}
使用此实体,我注意到 Jackson 还将序列化默认方法 getSentenceForTitle() - 尽管在我的特定情况下,我不希望 sentenceForTitle 被序列化。
有没有办法让杰克逊知道我不想序列化默认方法,但保留该方法的行为?我想出的当前解决方法是覆盖默认方法,使用@JsonIgnore 对其进行注释,并委托给默认方法:
@Entity
public class JpaBook implements Book {
// ...
@Override
@JsonIgnore
public String getSentenceForTitle() {
return Book.super.getSentenceForTitle();
}
}
但是对于具有许多默认方法的接口,此解决方案可能会变得非常冗长且容易出错。
【问题讨论】:
标签: json java-8 jackson default-method