我有一个类,它或多或少是一个double的包装类。当我通过jackson序列化我的课程时,我会收到类似:{“value”:123.0}的内容。我基本上想要发生的是,杰克逊给了我123.0。如果我可以扩展Number,我的问题就会解决,但由于我已经扩展了另一个类,所以这不是一个选项。
类别:
@JsonIgnoreProperties(ignoreUnknown = true)
@SuppressWarnings("unused")
public class TestValue {
@JsonProperty
private final Double d;
public TestValue(Double d) {
this.d = d;
}
}
结果:
{
"d" : 123.0
}
什么会像预期的那样起作用:
public class TestValue extends Number {
private final Double d;
public TestValue(Double d) {
this.d = d;
}
public double doubleValue() {
return d;
}
public float floatValue() {
return d.floatValue();
}
public int intValue() {
return d.intValue();
}
public long longValue() {
return d.longValue();
}
public String toString() {
return d.toString();
}
}
..导致:123.0
但是 - 你知道 - 我已经扩展了另一个抽象类。我怎样才能得到明确的结果?
答案 0 :(得分:4)
由于我确信有人可以重复使用,我会回答我自己的问题(感谢Gavin向我展示道路):
public class TestValue {
private final Double d;
public TestValue(Double d) {
this.d = d;
}
@JsonValue
public Double getValue() {
return d;
}
}
答案 1 :(得分:2)
您似乎想要自定义序列化,请参阅here。
答案 2 :(得分:1)
首先,为类型TestValue
创建自定义序列化程序。
public class TestValueSerializer extends JsonSerializer<TestValue> {
@Override
public void serialize(TestValue value, JsonGenerator gen, SerializerProvider provider) throws IOException,
JsonProcessingException {
gen.writeString(value.toString());
}
}
然后在@JsonSerialize(using=TestValueSerializer.class)
类型之前添加注释TestValue
。
顺便说一句,即使TestValue
没有扩展其他类,最好避免将其从Number
扩展。始终谨慎使用实现继承。