j'ai une interface avec une méthode par défaut:Jackson @JsonIgnore une méthode par défaut Java 8 hérité
public interface Book {
String getTitle();
default String getSentenceForTitle() {
return "This book's title is " + getTitle();
}
}
... et j'ai une Assemblée parlementaire paritaire @Entity
implémentant cette interface:
@Entity
public class JpaBook implements Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
// ...
@Override
public String getTitle() {
return title;
}
}
En utilisant cette entité, j'ai remarqué que Jackson va également sérialiser la méthode par défaut getSentenceForTitle()
- bien que dans mon cas particulier, je ne veux pas que sentenceForTitle
soit sérialisé.
Existe-t-il un moyen de faire savoir à Jackson que je ne veux pas que les méthodes par défaut soient sérialisées, tout en conservant le comportement de cette méthode? La solution actuelle, je suis venu avec est redéfinissant la méthode par défaut, annoter avec @JsonIgnore
, et de déléguer à la méthode par défaut:
@Entity
public class JpaBook implements Book {
// ...
@Override
@JsonIgnore
public String getSentenceForTitle() {
return Book.super.getSentenceForTitle();
}
}
Mais cette solution peut être assez bavard et sujette aux erreurs pour les interfaces avec de nombreuses méthodes par défaut.
Impressionnant, je suis allé avec l'option * '@ JsonIgnoreProperties (..)' sur le niveau de la classe d'entités JPA *. Je trouve que c'est la solution la plus propre, car elle maintient cet aspect de sérialisation cohérent avec la classe centrée sur la sérialisation. – Abdull