4

私は多かれ少なかれダブルの周りを包むクラスであるクラスを持っています。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

しかし-ご存知のとおり-私はすでに他の抽象クラスを拡張しています。どうすれば期待される結果を得ることができますか?

4

3 に答える 3

5

誰かがこれを再利用できると確信しているので、私は自分の質問に答えます(方法を教えてくれたGavinに感謝します):

public class TestValue {
    private final Double d;

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

    @JsonValue
    public Double getValue() {
        return d;
    }
}
于 2013-01-06T10:19:02.327 に答える
2

シリアル化をカスタマイズしたいようです。ここを参照してください。

于 2013-01-06T09:54:47.563 に答える
1

まず、 type のカスタム シリアライザーを作成します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。実装の継承は常に注意して使用してください。

于 2013-01-06T10:16:51.567 に答える