Java 如何让Jackson使用方法将类序列化为JSON?

Java 如何让Jackson使用方法将类序列化为JSON?,java,json,serialization,jackson,customization,Java,Json,Serialization,Jackson,Customization,假设我有以下课程: 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()

假设我有以下课程:

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”}

您正在查找
@JsonProperty
注释。把它放在你的方法中:

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

此外,Jackson一直拒绝序列化
MyClass
,因此为了避免出现问题,您可以向
t
属性添加一个简单的getter。

如果您想生成

{"t":"50.50"}
您可以使用哪个指示

这是带注释的“getter”方法(即签名)的结果 必须是getter的类型;将使用非void返回类型(无参数) 作为要为实例序列化的单个值

如果你想生产

{"t":{"test":"50.50"}}
您可以使用自定义

类TestSerializer扩展了JsonSerializer{ @凌驾 public void serialize(整数值、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{ jgen.writeString(值+“+”值); } } ... @JsonSerialize(使用=TestSerializer.class) 私人智力测验;
Jackson在序列化时查找getter和@JsonProperty注释的方法。在您的情况下,输出将是
{“t”:“50.50”}
。哦,对不起,我没有抓住要点。要生成输出,属性值应该是
test
,我现在正在编辑。我喜欢您的答案作为生成
{“t”:{“test”:“50.50”}
而不是使用自定义序列化程序的更简单的替代方法。谢谢
{"t":{"test":"50.50"}}
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;