某些字段的 Jackson JSON 自定义序列化

2022-08-31 09:24:17

有没有办法使用 Jackson JSON 处理器来执行自定义字段级序列化?例如,我想拥有该类

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

序列化为以下 JSON:

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

请注意,age=25 编码为数字,而 favoriteNumber=123 编码为字符串。开箱即用的杰克逊马歇尔到一个数字。在本例中,我希望 favoriteNumber 编码为字符串。int


答案 1

您可以实现自定义序列化程序,如下所示:

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 应该为您处理从 到 的自动装箱。intInteger


答案 2

Jackson-databind(至少 2.1.3)提供特殊ToStringSerializer (com.fasterxml.jackson.databind.ser.std.ToStringSerializer)

例:

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