我们说我有以下课程:
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;
}
}
当杰克逊序列化MyClass
的实例时,它将如下所示:
{"t":{"test":50}}
我是否可以在Test
类中添加注释以强制Jackson在序列化toCustomString()
对象时调用Test
方法?
当杰克逊序列化MyClass
的实例时,我希望看到以下输出之一:
{"t":"50.50"}
{"t":{"test":"50.50"}}
答案 0 :(得分:5)
如果你想制作
{"t":"50.50"}
您可以使用@JsonValue
表示
注释" getter"的结果方法(这意味着签名 必须是吸气剂的;将使用非void返回类型,无args) 作为实例序列化的单个值。
@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;
答案 1 :(得分:4)
您正在寻找@JsonProperty
注释。把它放到你的方法:
@JsonProperty("test")
public String toCustomString() {
return test + "." + test;
}
此外,杰克逊一直拒绝序列化MyClass
,因此为避免出现问题,您可以在t
属性中添加一个简单的getter。