Modificare il campo nome in JSON utilizzando Jackson

Sto usando jackson per convertire un oggetto di mia json.
L’oggetto dispone di 2 campi:

@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 jQuery auto completa funzionalità voglio ‘id’ apparire come ‘valore’ in json e ‘nome’ apparire come ‘etichetta’. La documentazione di jackson non è chiara su questo e ho provato ogni annotazione che anche a distanza sembra che tutto ciò di cui ho bisogno, ma non riesco a name apparire come label e id apparire come value in json.

Qualcuno sa come fare o se questo è possibile?

  • se Se si fosse mai potrebbe utilizzare entity (“Città”) per altri scopi o di logica di business, vorrei evitare di definire la sua rappresentazione JSON come Etichetta & Valore. OTOH, se questo è puramente di riferimento i dati utilizzati per le combo, si sta probabilmente andando ad avere di più, facendo in modo che un’entità generica (in Coppia o in Opzione) per coprire tutti questi è un possibile approccio da prendere in considerazione.
InformationsquelleAutor Ali | 2011-08-31

 

3 Replies
  1. 298

    Hai provato con @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; }
    }
    • Sì, ho provato, però io stavo facendo @JsonProperty(value="label") e non funzionava, ho provato come hai suggerito e funziona! grazie uomo questo sarà davvero aiutare a semplificare il codice.
    • Ho una simile esigenza. Solo che sto usando Jackson con RESTEasy e questo non funziona :-/ Strano!
    • verificare che Jackson è davvero il fornitore configurato e non qualcos’altro
    • c’è un modo per sfruttare Jackson (o EDILETTO) per modificare un nome di proprietà in una già esistente stringa JSON (non durante la serializzazione)?
    • Io ho utilizzato l’oggetto @JsonProperty(“oggetto”), val jsonObject: Stringa, ma non è riuscito …
  2. 44

    Essere consapevoli che c’è org.codehaus.jackson.annotate.JsonProperty a Jackson 1.x e com.fasterxml.jackson.annotation.JsonProperty a Jackson 2.x. Controllare che ObjectMapper che si sta usando (da quale versione), e assicurarsi di utilizzare l’apposita annotazione.

    • C’è anche un org.json4s.jackson spazio dei nomi. 🙂 e, eventualmente, altri implementazione di jackson YMMV.
  3. 10

    C’è una opzione per rinominare campo:

    Jackson MixIns.

    Utile se avete a che fare con classi di terza parte, che si sono non è in grado di annotare, o semplicemente non vuole inquinare la classe con Jackson annotazioni specifiche.

    Jackson documentazione per Mixins non è aggiornato, quindi questo esempio in grado di fornire maggiore chiarezza. In sostanza: si crea mixin di classe che fa la serializzazione in modo che si desidera. Quindi registrare il ObjectMapper:

    objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
    • Sono curioso questo può influenzare le prestazioni durante la serializzazione/deserializzazione campi?

Lascia un commento