[英]Dropwizard/Jersey returns Java List as JSON without root node
我正在使用dropwizard,它使用泽西和杰克逊为json。 我的问题是,当我返回一个列表时,它没有指定根。
我有一个POJO课程:
public class Company {
public String id;
public String name;
public String address;
}
我的资源设置如下:
@GET
@Path("/companies/all")
public List<Company> getAllCompanies(){
...
return companies;
}
我收到以下回复:
[{
"id": "01",
"name": "Yammer Corp",
"address": "1 Finite Loop"
},
{
"id": "02",
"name": "DropWizards Inc",
"address": "4 Magic Square, Olympus"
}]
虽然我想要的是如下:
{"Companies" :
[{
"id": "01",
"name": "Yammer Corp",
"address": "1 Finite Loop"
},
{
"id": "02",
"name": "DropWizards Inc",
"address": "4 Magic Square, Olympus"
}
]}
有任何想法吗? 提前致谢。
您需要再创建一个POJO包装List<Company>
public class ApiResponse
{
private List<Company> Companies;
//Getter and Setter
//Public Constructor
}
您的GET方法中所需的更改是:
@GET
@Path("/companies/all")
public ApiResponse getAllCompanies(){
//Set your ApiResponse Object with the companies List.
ApiResponse apiResponse = new ApiResponse(companies);
return apiResponse;
}
我相信你可以使用Jackson API进行自定义。 这是一种允许您使用ObjectWriter设置生成的JSON的根的方法。
@GET
@Path("/companies/all")
public Response getAllCompanies() throws JsonProcessingException {
List<Company> companies = Lists.newArrayList();
Company yc = new Company();
yc.id = "01";
yc.name = "Yammer Corp";
yc.address = "1 Finite Loop";
companies.add(yc);
Company dw = new Company();
dw.id = "02";
dw.name = "DrowWizards Inc";
dw.address = "4 Magic Square, Olympus";
companies.add(dw);
ObjectMapper objectMapper = new ObjectMapper();
ObjectWriter writer = objectMapper.writer();
String entity = writer.withRootName("Companies").writeValueAsString(companies);
return Response.ok(entity).build();
}
如果您查看代码,则要求返回公司列表:
public List<Company> getAllCompanies(){
如果要返回具有Companies值的JSON对象,则需要一个与之匹配的合适Java对象。
public class MyListOfCompanies {
List<Companies> companies;
}
然后你会要求你的代码返回:
public MyListOfCompanies getAllCompanies(){
但是,请考虑是否真的想要这样做。 如果您考虑某人编码到您的API的情况,他们是否会收到公司列表(正如他们所要求的那样,并且API意味着他们将获得),或者除了包含公司列表之外没有任何目的的对象?
最后,对于良好的REST设计,获取所有公司列表的常用方法是使用路径/公司,而不是/ companies / all。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.