2011-08-31 17 views
103

sto usando Jackson per convertire un oggetto di miniera per JSON. L'oggetto dispone di 2 campi:Variazione nome del campo in JSON utilizzando Jackson

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 
    public String getName() { return name; } 
    public void setName(String name){ this.name = name; } 
    public Long getId() { return id; } 
    public void setName(Long id){ this.id = id; } 
} 

Dato che voglio usare questo con la funzione completa jQuery auto che voglio 'id' per apparire come 'valore' in JSON e 'nome' di apparire come 'label' . La documentazione di Jackson non è chiara su questo e ho provato ogni annotazione che anche lontanamente sembra come fa quello che mi serve ma non riesco a ottenere name per apparire come label e id per apparire come value nel json.

Qualcuno sa come fare questo o se questo è possibile?

+0

se Se dovessi usare potenzialmente l'entità ("Città") per qualsiasi altro scopo o logica aziendale, eviterei di definire la sua rappresentazione JSON come Etichetta e Valore. OTOH se si tratta di dati puramente di riferimento utilizzati per le combo, probabilmente ne avrai di più: creare un'entità generica (Pair o Opzione) per coprire tutti questi è un possibile approccio da considerare. –

risposta

214

Hai provato a usare @JsonProperty?

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 

    @JsonProperty("label") 
    public String getName() { return name; } 

    public void setName(String name){ this.name = name; } 

    @JsonProperty("value") 
    public Long getId() { return id; } 

    public void setId(Long id){ this.id = id; } 
} 
+3

Sì, l'avevo provato, tuttavia stavo facendo '@JsonProperty (value =" label ")' e non funzionava, l'ho provato come hai suggerito e funziona! grazie amico questo aiuterà davvero a semplificare il codice ora. – Ali

+0

Ho un requisito simile. Solo che sto usando Jackson con RESTEasy e questo non funziona: -/Strano! – Nikhil

+0

verifica che Jackson sia realmente il provider configurato e non qualcos'altro –

27

Essere consapevoli del fatto che non v'è org.codehaus.jackson.annotate.JsonProperty a Jackson 1.xe 2.x. com.fasterxml.jackson.annotation.JsonProperty a Jackson Verifica quale ObjectMapper stai usando (da quale versione) e assicurati di usare l'annotazione corretta.

5

C'è un'altra opzione per rinominare campo:

Jackson MixIns.

Utile se si gestiscono classi di terze parti, che si è non in grado di annotare, o semplicemente non si vuole inquinare la classe con annotazioni specifiche di Jackson.

Problemi correlati