java - 如何让 jackson 使用一种方法将类序列化为 JSON?

标签 java json serialization jackson customization

假设我有以下类(class):

public class MyClass {
    private Test t;

    public MyClass() {
        t = new Test(50);
    }
}

public class Test {
    private int test;

    public Test(int test) {
        this.test = test;
    }

    public String toCustomString() {
        return test + "." + test;
    }
}

当 Jackson 序列化 MyClass 的一个实例时,它将如下所示:

{"t":{"test":50}}

我是否可以在 Test 类中放置任何注释以强制 Jackson 在序列化 Test 对象时调用 toCustomString() 方法?

当 Jackson 序列化 MyClass 的实例时,我希望看到以下输出之一:

{"t":"50.50"}

{"t":{"test":"50.50"}}

最佳答案

如果要生产

{"t":"50.50"}

你可以使用@JsonValue这表明

that results of the annotated "getter" method (which means signature must be that of getters; non-void return type, no args) is to be used as the single value to serialize for the instance.

@JsonValue
public String toCustomString() {
    return test + "." + test;
}

如果你想生产

{"t":{"test":"50.50"}}

您可以使用自定义 JsonSerializer .

class TestSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeString(value + "." + value);
    }
}
...
@JsonSerialize(using = TestSerializer.class)
private int test;

关于java - 如何让 jackson 使用一种方法将类序列化为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29550006/

相关文章:

java - Oracle 连接池类

用于在 overpass-API 端点上运行请求的 Python 包装器

c# - 为什么 Json.Net 在序列化时会在我的对象上调用 Equals 方法?

java - 使用 java.util.Logging 将某些类记录到单个文件中,并将某些类记录到各自的日志文件中

java - 如何在 ArrayBlockingQueue 中使用谓词来使用方法 "removeIf"

java - 验证枚举结构中的值

Python 请求模块和 JSON 响应

json - 使用 JSON 数据,尝试解析嵌套数据

wcf - 如何防止 WCF 将字节数组自动序列化为 base-64 编码字符串?

php - 在php中,我取消了一个对象的属性,但是反序列化之后,属性又回来了,为什么?