1
我有一个默认的方法的接口:杰克逊@JsonIgnore继承的Java 8默认方法
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;
}
}
使用此实体,我注意到杰克逊也将序列化默认方法getSentenceForTitle()
- 虽然在我的特殊情况下,我不想sentenceForTitle
被序列化。
有没有让杰克逊知道我不想有一个默认方法序列化,但保持该方法的行为?目前的解决方法,我想出了压倒一切的默认方法,用@JsonIgnore
注释它,并委托给默认的方法:
@Entity
public class JpaBook implements Book {
// ...
@Override
@JsonIgnore
public String getSentenceForTitle() {
return Book.super.getSentenceForTitle();
}
}
但是这种解决方案可以得到相当繁琐,容易出错的接口有许多默认的方法。
真棒,我选择去*'@ JsonIgnoreProperties(..)'在JPA实体类水平*。我发现它是最干净的解决方案,因为它使序列化方面与以序列化为中心的类保持一致。 – Abdull