2012-03-07 20 views
10

Estoy escribiendo algunos servicios RESTful usando spring MVC. Estoy usando jsckson mapper para hacer las conversiones It. Todo funciona bien, excepto que el json que produce tiene campos completamente desordenados.Campos JSON desordenados

por ej. Si mi objeto de entidad se ve así:

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

Si ahora tengo una lista de EntityObjs, y devolver esta parte posterior del controlador, el JSON tiene el orden de mezclado de los campos, por ejemplo: [{y : "ABC", z: "XYZ", x: "DEF"}, {y: "ABC", z: "XYZ", x: "DEF"}]

Busqué una solución pero no encontré alguna. ¿Alguien más se enfrentó a este problema?

Gracias por la ayuda

+3

Pero ¿por qué es esto un problema? Siempre que utilicé JSON también noté el orden extraño, pero de todos modos, cuando lo acceda más tarde, probablemente accederá por "clave", por lo que el orden no debería importar. – YuviDroid

+0

Es bueno señalar que no debería ser un problema, pero tengo curiosidad por saber por qué desea pedirlos. ¿TIENES una razón especial para hacerlo? – koenpeters

+0

bien, solo para que sea legible. no hay problema al analizarlo. tengo objetos con atributos de lista. así que digamos un objeto A con una lista de objectB dentro de él junto con otros atributos como id, name, etc. Cuando alguien ve la respuesta json de mi API, prefiero que vean el id y el nombre y la lista de ObjectBs después de eso . – gotz

Respuesta

18

Como otros sugirieron, pedidos no debería importar. No obstante, si lo prefiere cierto orden, utilice @JsonPropertyOrder anotación de este modo:

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

Muchas gracias, Que resuelve mi problema – gotz

+2

o puede definir esto globalmente 'objectMapper.configure (MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)' –

3

me di cuenta de esto no funciona con nombres de variables que comienzan con las letras mayúsculas. Por ejemplo, una variable llamada "ID" no se ordenará.

+1

puede arreglar eso usando @JsonPropertyOrder ({"id", "otherfields"}), la clave es listar los campos a medida que ocurren en la salida JSON. – pushNpop

+0

No puedo hacer +1 suficiente. Jackson @ JsonPropertyOrder requiere que todas las propiedades de la clase que desea que se ordenen sean de camello. No he visto eso documentado en DONDEQUIERA. –

0

Si traje orden alfabético usted y que está utilizando la primavera de arranque, puede agregar esto en su application.properties:

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