9
votes

Filtrage dynamique Jackson des propriétés lors de la désérialisation

J'ai un repos WS pour mettre à jour un objet de haricot qui reçoit une chaîne JSON en tant qu'entrée.

class ABean {
    public BBean b;
    public CBean c;

    public String d;
}


0 commentaires

4 Réponses :


1
votes

Je suppose de votre description que vous ne pouvez pas simplement utiliser l'annotation @jsonignore pour empêcher les champs d'être sérialisés pour chaque classe particulière.

regarder en utilisant JAKSON MIX-INS : Mix-INS vous permet de remplacer une définition de classe - avec les annotations nécessaires - pour la liaison de données. Pendant la sérialisation, vous pouvez choisir une définition de classe de mélange particulière à stand dans pour la classe actuelle étant sérialisée. Définissez un ensemble de mélanges pour gérer tous les cas, puis choisissez qui est approprié lorsque vous serifiez un haricot particulier.


1 commentaires

Je pense que cela a le même pouvoir que je puisse obtenir en utilisant des vues. Et si j'ai un ensemble de rôles dynamiques, j'entraîne d'une base de données avec leurs autorisations et que je veux filtrer en fonction de ces règles?



1
votes

Vous pouvez utiliser @jsonignoreType pour ignorer une classe / interface / Enum Java de Serializing. De plus, vous pouvez utiliser @jsonignoreProperties pour ignorer une liste de propriétés et @jsonignore pour une propriété spécifique


1 commentaires

Ceci est valable uniquement pour le filtrage statique (compilé)



0
votes

La solution la plus puissante, la plus rapide et la plus facile que j'ai proposée est de filtrer simplement l'arborescence Jsonnode obtenue à partir de la désérialisation, puis passez le résultat filtré à la lecture en direct. Quelque chose comme ça: xxx


0 commentaires

7
votes

Un autre moyen est d'utiliser beanDeserializermodificateur: xxx

Vous pouvez enregistrer le modfier à l'objetMapper avec: xxx

alors les propriétés définies sont alors les propriétés définies. ignoré. Vous pouvez ignorer la méthode UpdateBuilder si vous utilisez l'annotation @jsonaNaNetter.

Salutations, Martin


2 commentaires

Merci! J'ai rencontré le même problème que l'affiche originale et croire que cela devrait être la réponse acceptée, car elle prend en charge de supprimer de manière sélective les propriétés basées sur le type de classe.


Comment enregistrer le modificateur avec Jersey?