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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-24 15:21:17333Durchsuche

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;
  }
}

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);

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;
  }
}

Vergessen Sie nicht, es in Jackson zu integrieren:

simpleModule.addSerializer(new UserSerializer());

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!

Stellungnahme:
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