Maison > Java > javaDidacticiel > le corps du texte

Comment implémenter correctement des sérialiseurs personnalisés avec `handledType()` et `serialize()` de Jackson ?

Susan Sarandon
Libérer: 2024-11-24 15:21:17
original
251 Les gens l'ont consulté

How to Properly Implement Custom Serializers with Jackson's `handledType()` and `serialize()`?

Utilisation de sérialiseurs personnalisés avec Jackson

Dans votre code, vous recevez une IllegalArgumentException car JsonSerializer nécessite une méthode handledType() pour spécifier le type poignées. Voici comment l'implémenter correctement à l'aide de handledType() et serialize() :

public class ItemSerializer extends JsonSerializer<Item> {

  @Override
  public void serialize(Item value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeNumberField("itemNr", value.getItemNr());
    jgen.writeNumberField("createdBy", value.getCreatedBy().getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<Item> handledType() {
    return Item.class;
  }
}
Copier après la connexion

Intégration avec Jackson :

Après avoir défini le sérialiseur personnalisé, vous devez intégrer avec Jackson. Ceci peut être réalisé à l'aide d'un SimpleModule :

ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule("SimpleModule",
                                              new Version(1,0,0,null));
simpleModule.addSerializer(new ItemSerializer());
mapper.registerModule(simpleModule);
Copier après la connexion

Maintenant, vous pouvez utiliser le mappeur personnalisé pour sérialiser les objets Item.

Sérialisation des objets utilisateur :

Pour sérialiser les objets Utilisateur avec un format personnalisé, vous pouvez définir un sérialiseur distinct :

public class UserSerializer extends JsonSerializer<User> {

  @Override
  public void serialize(User value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<User> handledType() {
    return User.class;
  }
}
Copier après la connexion

Ne pas oubliez de l'intégrer avec Jackson :

simpleModule.addSerializer(new UserSerializer());
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal