在Tomcat和Glassfish上运行时,我遇到运行相同代码的返回列表的json结构的差异。
@XmlRootElement
public Class Person {
private int personId;
private String name;
}
@GET
@Path("/persons")
public Response getPersons()
{
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "John Smith"));
persons.add(new Person(2, "Jane Smith"));
GenericEntity<List<Person>> entity = new GenericEntity<List<Person>>(Lists.newArrayList<persons)) {};
Return Response.ok(entity).build();
}
如果在tomcat上以json格式返回(我在本地机器上运行Tomcat),结果将是:
[
{
"personId" : "1",
"name" : "John Smith"
},
{
"personId" : "2",
"name" : "Jane Smith"
}
]
如果在Glassfish上以json格式返回(在远程服务器上运行Glassfish),结果将是:
{
"person" :
[
{
"personId" : "1",
"name" : "John Smith"
},
{
"personId" : "2",
"name" : "Jane Smith"
}
]
}
我如何控制这种格式?如果可能的话,我更喜欢数组格式(如在Tomcat上)。无论哪种方式,我希望它产生相同的结果。
编辑:
依赖关系: jersey-container-servlet(2.14), 泽西服务器(2.14), jersey-media-moxy(2.14), javax.servlet-api(3.0.1)
Glassfish版本:3.1.2.2(版本5)
编辑2: 这是Jersey 2.14和Glassfish 3.x的一个问题
我刚刚安装了Glassfish 3和4并部署了其余应用来检查响应。返回列表时会产生不同的json结构。 Glassfish 4的响应与我在Tomcat上运行时得到的结果相同。
答案 0 :(得分:1)
尝试添加响应mediatype注释并尝试使用List not GenericEntity,如下所示:
@GET
@Path("/persons")
@Produces({ MediaType.APPLICATION_JSON })
public Response getPersons()
{
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "John Smith"));
persons.add(new Person(2, "Jane Smith"));
Return Response.ok(persons).build();
}