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