2013-04-17 1 views
8

Ho un ID che è piuttosto grande su uno dei miei oggetti java. Quando Jackson lo converte in JSON si invia verso il basso come un numero (ad esempio, { "id": 1000110040000000001}), ma non appena diventa un JavaScript Object l'id vengono cambiate in 1000110040000000000. ho letto su questo problema hereCome posso forzare Jackson a scrivere numeri come stringhe durante la serializzazione dei miei oggetti

Funziona bene quando l'ID è più piccolo. Il mio primo pensiero è quello di forzare Jackson a convertire tutti i numeri in stringhe, ma sono aperto anche ad altre opzioni. Se possibile, preferirei non aggiungere le annotazioni di Jackson ai miei oggetti java.

+1

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

+0

Grazie per averlo indicato. Apparentemente nella versione 2.1.3 puoi fare qualcosa del genere: @JsonSerialize (using = ToStringSerializer.class). Sarebbe comunque bello se potessi semplicemente impostare alcune impostazioni generali nel maper degli oggetti, ma ciò avverrà se ciò non è possibile. – testing123

+0

Possibile duplicato di [serializzazione personalizzata Jackson JSON per determinati campi] (https://stackoverflow.com/questions/12046786/jackson-json-custom-serialization-for-certain-fields) –

risposta

10

Jackson-databind (almeno 2.1.3) fornisce ToStringSerializer speciale. Che ha fatto per me.

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

com.fasterxml.jackson.core:jackson-core:2.5.4 prevede JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS per la configurazione 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)); 

uscita: { "a": "1"}

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

Per includere la dipendenza:

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

Grazie! Questo approccio mi consente di serializzare le classi generate automaticamente nel modo in cui voglio senza dover modificare la definizione della classe – Adam