2013-04-17 23 views
8

我有一個在我的一個java對象上非常大的id。當傑克遜將其轉換爲JSON時,它會將其作爲數字(例如{「id」:1000110040000000001})發送出去,但只要它變成javascript對象,id就會變爲1000110040000000000.我讀過關於此問題的信息here我如何強制傑克遜在序列化我的對象時將字符串編寫爲字符串

它在ID較小時工作正常。我的第一個想法是強迫傑克遜將所有數字轉換爲字符串,但我也願意接受其他選項。如果可能的話,我寧願不要將Jackson註釋添加到我的java對象中。

+1

相關:http://stackoverflow.com/ a/12046979/2129835 – thgaskell

+0

感謝您指出。顯然在版本2.1.3中,你可以做這樣的事情:@JsonSerialize(using = ToStringSerializer.class)。如果我能夠在對象映射器中設置一些整體設置,它仍然會很好,但如果這不可能,這將會執行。 – testing123

+0

[傑克遜JSON自定義序列化的某些領域]的可能重複(https://stackoverflow.com/questions/12046786/jackson-json-custom-serialization-for-certain-fields) –

回答

10

Jackson-databind(至少2.1.3)提供了特殊的ToStringSerializer。那爲我做了。

@Id @JsonSerialize(using = ToStringSerializer.class) 
private Long id; 
8

com.fasterxml.jackson.core:jackson-core:2.5.4提供 JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS爲ObjectMapper配置。

final ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true); 

Foo foo = new Foo(10); 
System.out.println("Output: " + objectMapper.writeValueAsString(foo)); 

輸出:{ 「一個」: 「1」}

class Foo { 
    @XmlElement(name = "a") 
    Integer a 
} 

要包含的依賴關係:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.7.2</version> 
</dependency> 
+0

謝謝!這種方法可以讓我以我想要的方式序列化自動生成的類,而無需更改類定義 – Adam

相關問題