簡體   English   中英

澤西島休息服務器 - 返回列表為json

[英]Jersey rest server - Return list as json

在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),jersey-server(2.14),jersey-media-moxy(2.14),javax.servlet-api(3.0.1)

Glassfish版本:3.1.2.2(版本5)

編輯2:這是澤西島2.14和Glassfish 3.x的問題

我剛剛安裝了Glassfish 3和4並部署了其余應用來檢查響應。 返回列表時會產生不同的json結構。 Glassfish 4的響應與我在Tomcat上運行時得到的結果相同。

嘗試添加響應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();
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM