Jackson の `handledType()` と `serialize()` を使用してカスタム シリアライザーを適切に実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 15:21:17
オリジナル
251 人が閲覧しました

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

Jackson でのカスタム シリアライザーの使用

JsonSerializer では型を指定するために handlerType() メソッドが必要であるため、コード内で IllegalArgumentException が発生します。ハンドル。ここでは、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 オブジェクトをシリアル化できます。

ユーザー オブジェクトのシリアル化:

カスタム形式でユーザーオブジェクトをシリアル化するには、別のシリアライザー:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート