Maison >Java >javaDidacticiel >Comment puis-je configurer Jackson pour qu'il utilise uniquement les champs pour la sérialisation et la désérialisation ?

Comment puis-je configurer Jackson pour qu'il utilise uniquement les champs pour la sérialisation et la désérialisation ?

DDD
DDDoriginal
2024-12-14 03:53:09310parcourir

How Can I Configure Jackson to Use Only Fields for Serialization and Deserialization?

Configurer Jackson pour utiliser les champs uniquement pour la sérialisation et la désérialisation

Le comportement par défaut de Jackson implique l'utilisation à la fois de propriétés (getters et setters) et de champs pour la sérialisation. et désérialisation vers JSON. Cependant, certains utilisateurs peuvent préférer donner la priorité aux champs comme seule source de configuration de sérialisation, à l'exclusion des propriétés.

Approche basée sur les annotations pour les classes individuelles

Pour appliquer ce comportement sur par classe, l'annotation @JsonAutoDetect peut être utilisée :

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

Cette annotation exclut les propriétés de la considération de Jackson, en veillant à ce que seuls les champs soient utilisés pour la liaison des données.

Configuration globale pour toutes les classes

Au lieu d'appliquer l'annotation à chaque classe manuellement, il est possible de configurer ce comportement globalement pour toutes les classes. Pour y parvenir, l'ObjectMapper doit être modifié comme suit :

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

Cette configuration remplace les paramètres de visibilité par défaut et demande à Jackson d'utiliser uniquement les champs pour la sérialisation et la désérialisation dans toutes les classes.

Accès global au mappeur configuré

Pour un accès global à l'ObjectMapper configuré, une classe wrapper peut être used :

public class MyGlobalMapper {
    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.setVisibility(MAPPER.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
    }

    public static ObjectMapper get() {
        return MAPPER;
    }
}

Cette classe wrapper fournit une méthode statique pour récupérer l'ObjectMapper configuré, lui permettant d'être utilisé dans toute l'application sans avoir besoin de le reconfigurer à chaque fois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn