Dropwizard/Jersey将Java List作为JSON返回,没有根节点

dot*_*ame 3 java jersey dropwizard

我正在使用dropwizard,它使用泽西和杰克逊为json.我的问题是,当我返回一个列表时,它没有指定根.

我有一个POJO课程:

public class Company { 
public String id; 
public String name; 
public String address; 
}
Run Code Online (Sandbox Code Playgroud)

我的资源设置如下:

@GET
@Path("/companies/all")
public List<Company> getAllCompanies(){
    ...
    return companies;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下回复:

[{
"id": "01",
"name": "Yammer Corp",
"address": "1 Finite Loop"
},
{
"id": "02",
"name": "DropWizards Inc",
"address": "4 Magic Square, Olympus"
}]
Run Code Online (Sandbox Code Playgroud)

虽然我想要的是如下:

{"Companies" : 
[{
"id": "01",
"name": "Yammer Corp",
"address": "1 Finite Loop"
},
{
"id": "02",
"name": "DropWizards Inc",
"address": "4 Magic Square, Olympus"
}
]}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢.

Sri*_*vas 8

你需要再创建一个POJO包装 List<Company>

public class ApiResponse
{
   private List<Company> Companies;
   //Getter and Setter
   //Public Constructor
}
Run Code Online (Sandbox Code Playgroud)

您的GET方法中所需的更改是:

@GET
@Path("/companies/all")
public ApiResponse getAllCompanies(){
    //Set your ApiResponse Object with the companies List.
    ApiResponse apiResponse = new ApiResponse(companies);
    return apiResponse;
}
Run Code Online (Sandbox Code Playgroud)

  • 我倾向于使用名为`ApiResponse`的POJO,它具有`status_code`,`status_message`和`data`,它是一个`Object`并作为有效载荷.感觉比修改ObjectMapper更整洁. (3认同)
  • 谢谢@Srinivas,我跟着你实施,它工作了!我修改了一下:`public class JSONListWrapper {public List <?> itemlist; public JSONListWrapper(List <?> itemlist){this.itemlist = itemlist; } (2认同)