Heim >Java >javaLernprogramm >Wie verwende ich einen benutzerdefinierten Serialisierer mit Jackson?
Um die Serialisierung einer Java-Klasse mit Jackson anzupassen, kann man einen definieren Benutzerdefinierter Serializer, der den JsonSerializer erweitert Klasse.
1. Erstellen Sie einen benutzerdefinierten Serializer für Artikel:
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.createdBy.id); jgen.writeEndObject(); } }
2. Erstellen Sie ein benutzerdefiniertes Serialisierungsmodul und registrieren Sie den Serializer:
ObjectMapper mapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule("SimpleModule", new Version(1,0,0,null)); simpleModule.addSerializer(new ItemSerializer()); mapper.registerModule(simpleModule);
3. Serialisieren Sie das Artikelobjekt:
StringWriter writer = new StringWriter(); mapper.writeValue(writer, myItem);
Der Fehler ist beim Registrieren des benutzerdefinierten Serialisierers aufgetreten (java.lang.IllegalArgumentException: JsonSerializer vom Typ ... definiert nicht gültig handledType()) gibt an, dass der Serialisierer den Typ, den er verarbeitet, nicht angibt.
Um dieses Problem zu beheben, stellen Sie sicher, dass die JsonSerializer-Implementierung ihre handledType()-Methode korrekt definiert.
Ein alternativer Ansatz besteht darin, ein Feld mit @ zu kommentieren. JsonSerialize(using = CustomSerializer.class) zur Verwendung eines bestimmten Serializer.
Um die Datumsserialisierung anzupassen, erstellen Sie einen benutzerdefinierten Serializer, der SerializerBase erweitert:
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); } }
Und fügen Sie dann die Anmerkung zum Feld hinzu:
@JsonSerialize(using = CustomDateSerializer.class) private Date createdAt;
Dies ermöglicht eine detaillierte Kontrolle über den Serialisierungs- und Deserialisierungsprozess.
Das obige ist der detaillierte Inhalt vonWie verwende ich einen benutzerdefinierten Serialisierer mit Jackson?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!