Maison >Java >javaDidacticiel >Comment exclure des champs spécifiques de la sérialisation Gson sans annotations ?

Comment exclure des champs spécifiques de la sérialisation Gson sans annotations ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 00:51:10183parcourir

How to Exclude Specific Fields from Gson Serialization without Annotations?

Gson : Exclusion de champs spécifiques de la sérialisation sans annotations

Exclusion de champs spécifiques de la sérialisation Gson sans annotations peut être délicate. Voici comment y parvenir à l'aide d'une ExclusionStrategy personnalisée :

Custom ExclusionStrategy

Gson fournit une interface ExclusionStrategy qui vous permet de personnaliser la façon dont les champs sont exclus. Créez une implémentation de cette interface :

public class FieldExclusionStrategy implements ExclusionStrategy {

    private Pattern pattern;

    public FieldExclusionStrategy(String regex) {
        pattern = Pattern.compile(regex);
    }

    @Override
    public boolean shouldSkipField(FieldAttributes fa) {
        String fieldName = fa.getName();
        return pattern.matcher(fieldName).matches();
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
}

Personnalisation de l'exclusion

Dans l'exemple fourni, ExclusionStrategy exclut les champs en fonction d'une expression régulière donnée. Vous pouvez personnaliser le modèle pour qu'il corresponde aux champs que vous souhaitez exclure, tels que country.name.

Utilisation de la stratégie d'exclusion

Une fois la stratégie d'exclusion définie, utilisez-la lors de la configuration le GsonBuilder :

Gson gson = new GsonBuilder()
    .setExclusionStrategies(new FieldExclusionStrategy("country.name"))
    .create();

Utilisation Exemple

Après avoir configuré Gson, vous pouvez sérialiser votre objet Student comme suit :

String json = gson.toJson(student);

Cela exclura le champ country.name de la sortie JSON sérialisée.

Notes supplémentaires

  • Si vous souhaitez exclure des champs en fonction d'autres critères (comme le type ou les annotations), vous pouvez modifier les méthodes ShouldSkipField et ShouldSkipClass en conséquence.
  • Pour les champs du même type, la règle d'exclusion s'applique toujours au chemin de champ spécifique. Dans ce cas, countryOfBirth.name ne sera pas exclu.
  • Pour exclure un type entier, remplacez la méthode ShouldSkipClass dans ExclusionStrategy.

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