2012-03-07 12 views
10

Sto scrivendo alcuni servizi RESTful utilizzando MVC di primavera. Sto usando jsckson mapper per fare le conversioni It. Funziona tutto bene tranne per il fatto che il codice sorgente che produce ha campi completamente non ordinati.Campi JSON non ordinati

per es. Se il mio oggetto entità assomiglia a questo:

public class EntityObj 
{ 
    private String x; 
    private String y; 
    private String z; 
} 

Se ora ho un elenco di EntityObjs, e torno questo ritorno dal controller, il JSON ha l'ordine misto per i campi, ad esempio: [{y : "ABC", z: "XYZ", x: "DEF"}, {y: "ABC", z: "XYZ", x: "DEF"}]

Cerca una soluzione ma non trova qualunque. Qualcun altro ha affrontato questo problema?

Grazie per l'aiuto

+3

Ma perché questo è un problema? Ogni volta che ho usato JSON ho notato anche l'ordinamento strano, ma comunque quando accederai in seguito probabilmente accederai con "chiave", quindi l'ordine non dovrebbe avere importanza. – YuviDroid

+0

Buon punto che non dovrebbe essere un problema, ma sono curioso del perché vorresti ordinarli. Hai una ragione particolare per farlo? – koenpeters

+0

bene, solo per renderlo leggibile. non c'è problema analizzandolo. ho oggetti con attributi di lista. quindi dì un oggettoA con una lista di oggettiB al suo interno insieme ad altri attributi come id, nome ecc. Quando qualcuno vede la risposta JSON dalla mia API, preferirei che vedano l'id e il nome e l'elenco di ObjectB dopo questo . – gotz

risposta

18

Come altri hanno suggerito, l'ordinamento non dovrebbe importare. Tuttavia, se si preferisce certo ordinamento, utilizzare @JsonPropertyOrder annotazione in questo modo:

@JsonPropertyOrder({ "x", "y", "x" }) 
public class EntityObj { 
} 
+0

Grazie mille, che risolve il mio problema – gotz

+2

o puoi definire globalmente 'objectMapper.configure (MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)' –

3

ho capito che questo non funziona con i nomi di variabili che iniziano con le lettere maiuscole. Ad esempio una variabile denominata "ID" non sarà ordinata.

+1

puoi aggiustarlo usando @JsonPropertyOrder ({"id", "otherfields"}), la chiave è elencare i campi fuori mano quando si verificano nell'output JSON. – pushNpop

+0

Non riesco a fare +1 su abbastanza. Jackson @JsonPropertyOrder richiede che tutte le proprietà della classe che si desidera ordinare siano in cammello. Non ho visto quello documentato OVUNQUE. –

0

Se vestito ordine alfabetico voi e si utilizza Primavera di avvio, è possibile aggiungere questo nel vostro application.properties:

spring.jackson.mapper.sort-properties-alphabetically=true