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;