2013-01-06 107 views
4

我有一個或多或少是一個圍繞double的包裝類。當我通過jackson序列化我的類時,我會收到類似於:{「value」:123.0}。我基本上想要發生的是,傑克遜只給我123.0。如果我可以擴展Number,我的問題就可以解決,但由於我已經擴展了另一個類,所以這不是一個選項。Jackson:將對象當作原始對象

類:

@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

但是 - 你知道 - 我已經在延伸另一個抽象類。我怎樣才能得到expteced結果?

回答

4

因爲我相信somene可以重複利用這一點,我會回答我的問題(與感謝加文顯示我的方式):

public class TestValue { 
    private final Double d; 

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

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

看起來您要自定義序列化,請參閱here

+0

謝謝,這導致我到正確的方向。其實它讓我到另一個問題:http://stackoverflow.com/questions/7161638/how-do-i-use-a-custom-serializer-with-jackson所以解決方案更簡單使用@JsonValue annontation是對我來說足夠了 - 謝謝! – KIC

+0

很高興幫助。 @KIC –

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()); 
} 

}

然後之前TestValue類型添加註解@JsonSerialize(using=TestValueSerializer.class)

順便說一句,即使TestValue還沒有擴展其他類,最好避免從Number擴展它。謹慎使用實現繼承。

相關問題