2013-04-17 6 views
8

Mam id, który jest dość duży na jednym z moich obiektów java. Kiedy jackson konwertuje go do JSON, wysyła go w dół jako liczbę (np. {"Id": 1000110040000000001}), ale gdy tylko staje się obiektem javascript, identyfikator zmienia się na 1000110040000000000. Przeczytałem o tym numerze: hereJak zmusić Jacksona do zapisywania liczb jako łańcuchów podczas serializacji moich obiektów?

Działa dobrze, gdy identyfikator jest mniejszy. Moją pierwszą myślą jest po prostu zmusić Jacksona do zamiany wszystkich liczb na struny, ale jestem także otwarty na inne opcje. Jeśli to możliwe, wolałbym nie dodawać adnotacji Jacksona do moich obiektów java.

+1

odpowiednio: http://stackoverflow.com/ a/12046979/2129835 – thgaskell

+0

Dzięki za wskazanie tego. Podobno w wersji 2.1.3 możesz zrobić coś takiego: @JsonSerialize (using = ToStringSerializer.class). Nadal byłoby miło, gdybym mógł ustawić ogólne ustawienie w programowaniu obiektów, ale zrobi to, jeśli nie będzie to możliwe. – testing123

+0

Możliwy duplikat niestandardowej serializacji [Jackson JSON dla niektórych pól] (https://stackoverflow.com/questions/12046786/jackson-json-custom-serialization-for-certain-fields) –

Odpowiedz

10

Jackson-databind (co najmniej 2.1.3) zapewnia specjalny ToStringSerializer. To zrobiło to dla mnie.

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

com.fasterxml.jackson.core:jackson-core:2.5.4 zapewnia JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS dla ObjectMapper konfiguracji.

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

wyjściowa: { "a", "1"}

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

Aby uwzględnić zależność:

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

Dzięki! Takie podejście pozwala na szeregowanie automatycznie generowanych klas w sposób jaki chcę, bez konieczności zmiany definicji klasy – Adam

Powiązane problemy