2014-02-07 134 views
1

我從某些內部API中獲取Serializable的實例。 Serializable實例實際上是LongString等。有沒有辦法使DTO可以處理這種情況?使用private Serializable value;,JSON以value: {}結束。使用Spring和Jackson JSON將java.io.Serializable實例序列化爲JSON

UPDATE

這裏是有問題的代碼的簡化例子:

@Controller 
public class SomeController 
{ 
    //... 
    public MyDto getInfo(Long id) 
    { 
    MyDto result = new MyDto(); 
    Serializable obj = svc.getInfo(id); 
    // obj is either Long, or String, or one of few more fundamental Java types 
    result.setValue(obj); 
    return result; 
    } 
} 

public class MyDto 
{ 
    private Serializable value; 
    public void setValue(Serializable info) 
    { 
    this.value = value; 
    } 
    public Serializable getValue() 
    { 
    return value; 
    } 
} 

更新2

我已經找到了答案,我的問題就在這裏:https://stackoverflow.com/a/20494813/341065

+0

你也許可以用自定義的'JsonDeserializer'來做。 –

回答

4

請注意,傑克遜不使用java.io.Serializable適用於任何情況:添加該功能沒有實際價值。它被忽略。由於這一點,傑克遜將看到任何實際類型(對於序列化,即編寫JSON)的等價值;或者在閱讀時,等同於java.lang.Object

如果您知道實際類型,您可以使用@JsonDeserialize(as=ActualType.class)註釋屬性來給出提示。但是,如果實際值爲String s和Long s,則確實不需要。

+0

實際類型是「Long」或「String」等幾種Java類型之一。內部API返回'Serializable'。我曾嘗試在DTO中傳入「private Object value」,但在JSON中沒有任何內容。 – wilx

+1

Jackson肯定應該將Long作爲基本的JSON數字,String作爲JSON字符串進行序列化。但是,你是按照原樣返回這些值,還是返回某種包裝對象? – StaxMan

+0

查看更新後的問題。 – wilx

相關問題