1. ホーム
  2. java

[解決済み] 特定のフィールドに対するJackson JSONカスタムシリアライゼーション

2022-12-19 23:15:48

質問

Jackson JSON Processor を使用して、カスタム フィールド レベルのシリアライズを行う方法はありますか。例えば、私は、クラス

public class Person {
    public String name;
    public int age;
    public int favoriteNumber;
}

は以下のようなJSONにシリアライズされます。

{ "name": "Joe", "age": 25, "favoriteNumber": "123" }

なお、age=25はエンコードされる際に 番号 としてエンコードされ、favoriteNumber=123 は 文字列 . Jacksonは箱から出して、マーシャル int を数値に変換します。この場合、favoriteNumberは文字列としてエンコードされるようにしたいのです。

どのように解決するのですか?

以下のようにカスタムシリアライザーを実装することができます。

public class Person {
    public String name;
    public int age;
    @JsonSerialize(using = IntToStringSerializer.class, as=String.class)
    public int favoriteNumber:
}


public class IntToStringSerializer extends JsonSerializer<Integer> {

    @Override
    public void serialize(Integer tmpInt, 
                          JsonGenerator jsonGenerator, 
                          SerializerProvider serializerProvider) 
                          throws IOException, JsonProcessingException {
        jsonGenerator.writeObject(tmpInt.toString());
    }
}

からのオートボックスはJavaが処理する必要があります。 int から Integer をプレゼントします。