首頁 >Java >java教程 >如何使用 Jackson 的 `handledType()` 和 `serialize()` 正確實作自訂序列化器?

如何使用 Jackson 的 `handledType()` 和 `serialize()` 正確實作自訂序列化器?

Susan Sarandon
Susan Sarandon原創
2024-11-24 15:21:17333瀏覽

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

在Jackson 中使用自訂序列化器

在您的程式碼中,您會收到IllegalArgumentException,因為JsonSerializer 需要HandlingType( ) 方法來指定它的類型手柄。以下是如何使用handledType()和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;
  }
}

與Jackson整合:

定義自訂序列化器後,需要整合式序列化器後,需要整合與傑克遜一起。這可以使用 SimpleModule 來實現:

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

現在,您可以使用自訂映射器來序列化 Item 物件。

序列化使用者物件:

要使用自訂格式序列化User 對象,可以定義一個單獨的序列化器:

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

不要忘記將其與Jackson 整合:

simpleModule.addSerializer(new UserSerializer());

以上是如何使用 Jackson 的 `handledType()` 和 `serialize()` 正確實作自訂序列化器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn