ホームページ > Java > &#&チュートリアル > 特定のニーズに合わせて Jackson にカスタム シリアライザーを実装するにはどうすればよいですか?

特定のニーズに合わせて Jackson にカスタム シリアライザーを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-25 20:53:11
オリジナル
370 人が閲覧しました

How to Implement Custom Serializers in Jackson for Specific Needs?

Jackson を使用してカスタム シリアライザーを実装する方法

概要

Jackson は、Java オブジェクトを JSON にシリアル化および逆シリアル化するための強力なツールを提供します。場合によっては、デフォルトのシリアル化が特定の要件を満たさないシナリオが発生する可能性があります。このような場合、カスタム シリアライザーを利用してシリアル化プロセスをカスタマイズできます。

特定のクラスにカスタム シリアライザーを使用する

特定のクラスにカスタム シリアライザーを使用するには、 JsonSerializer を拡張し、JsonSerializer#serialize メソッドをオーバーライドするクラス。このメソッド内で、ターゲット クラスのカスタム シリアル化ロジックを指定できます。

たとえば、Item クラスのカスタム シリアライザーを作成してみましょう:

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();
    }
    
}
ログイン後にコピー

Jackson へのカスタム シリアライザーの登録

カスタム シリアライザーを作成したら、シリアル化中にそれを使用するには、Jackson の ObjectMapper に登録する必要があります。これを行うには、SimpleModule を作成し、そこにシリアライザーを追加します。

SimpleModule simpleModule = new SimpleModule("SimpleModule", new Version(1, 0, 0, null));
simpleModule.addSerializer(new ItemSerializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(simpleModule);
ログイン後にコピー

カスタム シリアライザーによる特定のフィールドの処理

特定のシナリオでは、シリアル化のカスタマイズのみが必要な場合があります。オブジェクト内の特定のフィールド。これを実現するには、目的のフィールドに対して @JsonSerialize アノテーションを使用し、使用するカスタム シリアライザーを指定できます。

public class User {

    ...

    @JsonSerialize(using = UserSerializer.class)
    private String name;

    ...
}
ログイン後にコピー

これにより、特定のフィールドのシリアル化を個別に制御できるようになり、カスタマイズの柔軟性が提供されます。 JSON 出力。

結論

Jackson を使用してカスタム シリアライザーを実装すると、特定のクラスまたはフィールドのシリアル化動作により、要件に基づいて JSON 出力を制御できるようになります。フィールドとクラスの要件を慎重に確認して、カスタム シリアル化によって生成される JSON 構造を強化できる箇所を判断してください。

以上が特定のニーズに合わせて Jackson にカスタム シリアライザーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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