ホームページ >Java >&#&チュートリアル >Jackson でカスタム シリアライザーを使用するにはどうすればよいですか?
Jackson を使用して Java クラスのシリアル化をカスタマイズするには、 JsonSerializer を拡張するカスタム シリアライザークラス。
1.項目のカスタム シリアライザーを作成します:
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(); } }
2.カスタム シリアル化モジュールを作成し、シリアライザーを登録します:
ObjectMapper mapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule("SimpleModule", new Version(1,0,0,null)); simpleModule.addSerializer(new ItemSerializer()); mapper.registerModule(simpleModule);
3.項目オブジェクトをシリアル化します:
StringWriter writer = new StringWriter(); mapper.writeValue(writer, myItem);
カスタム シリアライザーの登録時にエラーが発生しました (java.lang.IllegalArgumentException: JsonSerializer of type ... が有効な定義をしていません) handleType()) は、シリアライザーが処理する型を指定していないことを示します。
この問題を解決するには、JsonSerializer 実装で handlerType() メソッドが正しく定義されていることを確認してください。
代替アプローチは、フィールドに @ アノテーションを付けることです。 JsonSerialize(using = CustomSerializer.class) 特定のserializer.
日付シリアル化をカスタマイズするには、SerializerBase を拡張するカスタム シリアライザーを作成します:
public class CustomDateSerializer extends SerializerBase<Date> { public CustomDateSerializer() { super(Date.class, true); } @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)"); String format = formatter.format(value); jgen.writeString(format); } }
次に、フィールドに注釈を追加します。
@JsonSerialize(using = CustomDateSerializer.class) private Date createdAt;
これにより、シリアル化と逆シリアル化を詳細に制御できます。プロセス。
以上がJackson でカスタム シリアライザーを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。