特定のフィールドのJackson JSONカスタムシリアル化 質問する

特定のフィールドのJackson JSONカスタムシリアル化 質問する

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 を文字列としてエンコードします。

ベストアンサー1

カスタム シリアライザーは次のように実装できます。

import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.core.JsonGenerator

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());
    }
}

intJava は からへのオートボクシングを処理する必要がありますInteger

おすすめ記事