关于java:Jackson:将对象视为原始对象

Jackson: treat object as primitive

我有一门课,差不多是一门关于双人间的包装课。当我通过Jackson序列化我的类时,我将收到类似于:"value":123.0的内容。我基本上希望发生的是,杰克逊只给了我123.0分。如果我可以扩展数字,我的问题就会解决,但是由于我已经扩展了另一个类,所以这不是一个选项。

班级:

1
2
3
4
5
6
7
8
9
10
@JsonIgnoreProperties(ignoreUnknown = true)
@SuppressWarnings("unused")
public class TestValue {
    @JsonProperty
    private final Double d;

    public TestValue(Double d) {
        this.d = d;
    }
}

结果:

1
2
3
{
 "d" : 123.0
}

预期效果如何:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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

但是-你知道-我已经在扩展另一个抽象类了。我怎样才能得到expteced结果?


因为我确信有人可以重用它,所以我会回答我自己的问题(感谢加文给我指路):

1
2
3
4
5
6
7
8
9
10
11
12
public class TestValue {
    private final Double d;

    public TestValue(Double d) {
        this.d = d;
    }

    @JsonValue
    public Double getValue() {
        return d;
    }
}


您似乎希望自定义序列化,请参见此处。


首先,为类型TestValue创建自定义序列化程序。

1
2
3
4
5
6
public class TestValueSerializer extends JsonSerializer<TestValue> {
@Override
public void serialize(TestValue value, JsonGenerator gen, SerializerProvider provider) throws IOException,
        JsonProcessingException {
    gen.writeString(value.toString());
}

}

然后在TestValue类型之前添加注释@JsonSerialize(using=TestValueSerializer.class)

顺便说一句,即使TestValue没有扩展其他类,最好避免从Number扩展。务必小心使用实现继承。