Jackson: comment ne sérialiser que les propriétés annotées

J’aimerais définir ma stratégie de sérialisation personnalisée (quels champs inclure) en utilisant Jackson. Je sais que je peux le faire avec des vues / filtres, mais cela introduit une très mauvaise chose – utiliser la représentation sous forme de chaîne des noms de champs, ce qui active automatiquement des problèmes de refactoring automatique.

Comment forcer Jackson à ne sérialiser que les propriétés annotées et rien de plus?

Si vous désactivez toute la détection automatique, vous ne devez sérialiser que les propriétés que vous avez annotées, qu’il s’agisse des propriétés elles-mêmes ou des accesseurs. Voici un exemple simple:

 private ObjectMapper om; @Before public void setUp() throws Exception { om = new ObjectMapper(); // disable auto detection om.disable(MapperFeature.AUTO_DETECT_CREATORS, MapperFeature.AUTO_DETECT_FIELDS, MapperFeature.AUTO_DETECT_GETTERS, MapperFeature.AUTO_DETECT_IS_GETTERS); // if you want to prevent an exception when classes have no annotated properties om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); } @Test public void test() throws Exception { BlahClass blahClass = new BlahClass(5, "email", true); Ssortingng s = om.writeValueAsSsortingng(blahClass); System.out.println(s); } public static class BlahClass { @JsonProperty("id") public Integer id; @JsonProperty("email") public Ssortingng email; public boolean isThing; public BlahClass(Integer id, Ssortingng email, boolean thing) { this.id = id; this.email = email; isThing = thing; } } 

Si vous souhaitez le faire sans configurer le mappeur uniquement pour un type spécifique:

 @JsonAutoDetect( fieldVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, creatorVisibility = Visibility.NONE ) public class BlahClass { @JsonProperty("id") private Integer id; @JsonProperty("email") private Ssortingng email; }