Heim > Java > javaLernprogramm > Hauptteil

Wie implementiert man benutzerdefinierte Serialisierer mit Jacksons „handledType()' und „serialize()' richtig?

Susan Sarandon
Freigeben: 2024-11-24 15:21:17
Original
250 Leute haben es durchsucht

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

Benutzerdefinierte Serialisierer mit Jackson verwenden

In Ihrem Code erhalten Sie eine IllegalArgumentException, da JsonSerializer eine handledType()-Methode benötigt, um den Typ anzugeben Griffe. So implementieren Sie es korrekt mit handledType() und 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;
  }
}
Nach dem Login kopieren

Integration mit Jackson:

Nachdem Sie den benutzerdefinierten Serializer definiert haben, müssen Sie ihn integrieren es mit Jackson. Dies kann mit einem SimpleModule erreicht werden:

ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule("SimpleModule",
                                              new Version(1,0,0,null));
simpleModule.addSerializer(new ItemSerializer());
mapper.registerModule(simpleModule);
Nach dem Login kopieren

Jetzt können Sie den benutzerdefinierten Mapper verwenden, um Item-Objekte zu serialisieren.

Benutzerobjekte serialisieren:

Um Benutzerobjekte mit einem benutzerdefinierten Format zu serialisieren, können Sie ein separates definieren Serializer:

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;
  }
}
Nach dem Login kopieren

Vergessen Sie nicht, es in Jackson zu integrieren:

simpleModule.addSerializer(new UserSerializer());
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie implementiert man benutzerdefinierte Serialisierer mit Jacksons „handledType()' und „serialize()' richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage