2011-07-13 13 views
5

Estoy construyendo una aplicación web Java REST con el uso de Jersey para obtener datos JSON.Jersey JSON clave/orden de valor

Me encontré con un problema con el orden de los pares de clave/valor. Quiero que sea esta orden: id, name, areaId Pero en mi salida JSON es esta orden: areaId, id, name though.

¿Alguien sabe cómo controlar el pedido?


Ésta es mi habitación clase de objeto:

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class RoomEntitiy { 

private int id; 
private String name; 
private int areaId; 

public RoomEntitiy() {} 

public RoomEntitiy(int id, String name, int areaId) { 
    this.id = id; 
    this.name = name; 
    this.areaId = areaId; 
} 
@XmlAttribute 
public final int getId() { 
    return id; 
} 

public final void setId(int id) { 
    this.id = id; 
} 

public final String getName() { 
    return name; 
} 

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


public final int getArea() { 
    return areaId; 
} 

public final void setArea(int areaId) { 
    this.areaId = areaId; 
} 

} 

Ésta es mi salida JSON:

{ 
"rooms": [ 
    { 
     "areaId": 2, 
     "id": 1, 
     "name": "room 831" 
    }, 
    { 
     "areaId": 1, 
     "id": 2, 
     "name": "room 683" 
    }, 
    { 
     "areaId": 1, 
     "id": 3, 
     "name": "Raum 485" 
    }, 
    { 
     "areaId": 5, 
     "id": 4, 
     "name": "room 600" 
    }, 
    { 
     "areaId": 2, 
     "id": 5, 
     "name": "room 283" 
    }, 
    { 
     "areaId": 4, 
     "id": 6, 
     "name": "room 696" 
    } 
    ] 
} 

ACTUALIZACIÓN Ok, lo resolví. Gracias por tus respuestas.

acabo añade el siguiente código a continuación @XmlRootElement

@XmlType(propOrder = { 
    "id", 
    "name", 
    "areaId" 
}) 
+2

¿Por qué es importante el pedido? Los objetos JavaScript no tienen un orden inherente. –

Respuesta

4

Parece que el orden del elemento es alfabético. (Sí, soy Sherlock Holmes ..). En la mayoría de los casos, no es necesario pedir atributos individuales. Pero creo que una vez hice algo de personalización y puede usar la siguiente anotación para controlar la serialización.

@XmlRootElement 
@XmlType(propOrder={"id", "areaId", "name"}) 

Si esto no funciona, entonces podría utilizar otro mecanismo de serialización como Jackson o Gson.

+0

Gracias @ doc_180 ya lo encontré – imwill

3

objetos JSON son explicitly unordered.

un objeto es una colección desordenada de cero o más de nombre/valor pares

Si usted quiere orden, utilice una matriz (pero en este caso, lo que usted utiliza para procesar los datos sólo debe solicitar las teclas en el orden que quiere en lugar de bucle).

Cuestiones relacionadas