pac*_*low 7 java customization serialization json jackson
假设我有以下课程:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
当Jackson序列化一个实例时MyClass
,它将如下所示:
{"t":{"test":50}}
我是否可以在Test
类中添加注释以强制Jackson toCustomString()
在序列化Test
对象时调用该方法?
当Jackson序列化一个实例时,我想看到以下输出之一MyClass
:
{"t":"50.50"}
{"t":{"test":"50.50"}}
您正在寻找@JsonProperty
注释。只需将其放入您的方法即可:
@JsonProperty("test")
public String toCustomString() {
return test + "." + test;
}
Run Code Online (Sandbox Code Playgroud)
另外,Jackson始终拒绝序列化MyClass
,因此为了避免出现问题,您可以在t
属性中添加一个简单的getter 。
如果你想生产
{"t":"50.50"}
Run Code Online (Sandbox Code Playgroud)
你可以用@JsonValue
哪个表示
注释"getter"方法的结果(这意味着签名必须是getter;非void返回类型,没有args)将被用作实例序列化的单个值.
@JsonValue
public String toCustomString() {
return test + "." + test;
}
Run Code Online (Sandbox Code Playgroud)
如果你想生产
{"t":{"test":"50.50"}}
Run Code Online (Sandbox Code Playgroud)
你可以使用自定义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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9534 次 |
最近记录: |