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; } }
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);
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; } }
Ne pas oubliez de l'intégrer avec Jackson :
simpleModule.addSerializer(new UserSerializer());
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!