我正在构建一个Java REST Web App,使用Jersey来获取JSON数据输出。
我遇到了键/值对排序的问题。 我希望它是这个顺序: id,name,areaId 但在我的JSON输出中,这是这个顺序: areaId,id,name 虽然。
有人知道如何控制订购吗?
这是我的房间对象类:
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;
}
}
这是我的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"
}
]
}
更新 好的,我解决了。谢谢你的回复。
我刚刚在 @XmlRootElement
下添加了以下代码@XmlType(propOrder = {
"id",
"name",
"areaId"
})
答案 0 :(得分:5)
似乎元素的顺序是按字母顺序排列的。(是的,我是Sherlock Holmes ......)。在大多数情况下,无需订购单个属性。但我相信我曾经做过一些自定义,你可以使用以下注释来控制序列化。
@XmlRootElement
@XmlType(propOrder={"id", "areaId", "name"})
如果这不起作用,那么你可以使用像Jackson或Gson这样的其他序列化机制。
答案 1 :(得分:4)
JSON对象是explicitly unordered。
对象是零个或多个名称/值对的无序集合
如果你想要订购,请使用一个数组(但在这种情况下,无论你用什么来处理数据,都只需按照它想要的顺序请求密钥而不是循环)。