Utilisation de sérialiseurs personnalisés avec Jackson
Jackson est une bibliothèque de traitement JSON populaire en Java connue pour sa flexibilité et ses performances. Pour gérer des exigences de sérialisation spécifiques, vous pouvez utiliser des sérialiseurs personnalisés. Cet article fournit un guide étape par étape pour créer et utiliser des sérialiseurs personnalisés avec Jackson.
Considérez un scénario dans lequel vous disposez de deux classes Java, User et Item. Vous souhaitez sérialiser des objets Item en JSON, en spécifiant des règles de sérialisation personnalisées pour l'utilisateur et l'article.
Pour créer un sérialiseur personnalisé pour Item, vous pouvez définir une classe qui étend JsonSerializer
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.id); jgen.writeNumberField("itemNr", value.itemNr); jgen.writeNumberField("createdBy", value.user.id); jgen.writeEndObject(); } }
Cependant, l'enregistrement direct du sérialiseur personnalisé peut entraîner l'erreur que vous avez rencontrée. Au lieu de cela, vous devez l'enregistrer à 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);
Enfin, vous pouvez utiliser l'ObjectMapper pour sérialiser votre objet Item en JSON, en appliquant les règles de sérialisation personnalisées.
Alternativement, pour la gestion Champs de date dans vos objets Java, vous pouvez créer un sérialiseur personnalisé comme celui-ci :
public class CustomDateSerializer extends SerializerBase<Date> { public CustomDateSerializer() { super(Date.class, true); } @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)"); String format = formatter.format(value); jgen.writeString(format); } }
En annotant le champ Date avec @JsonSerialize(using = CustomDateSerializer.class), la sérialisation personnalisée sera automatiquement appliquée.
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!