使用Jersey.Am开发一个休息网络服务,对webservices稍微有点新意。我需要将客户列表作为输入传递给rest webservice。在实现它时遇到了问题。
以下是我的客户对象类
@Path("/add")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public String addCust(@Valid customer[] customers){
//And json input is as below
{customers:{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}}
我的终点如下。 addCust是调用webservice时调用的方法
trim
但是球衣无法将json数组转换为客户数组。它返回400.并且日志显示"在c"没有可行的替代方案。如何将Json数组作为输入传递给webservice并转换为Array或ArrayList。任何帮助表示赞赏。
答案 0 :(得分:6)
您的json无效,字段名称应始终双引号,并且数组放在[]中,例如:
{"customers":[{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}]}
这就是为什么杰克逊不能解散它。但是这个json永远不适合你的api。
以下是您应该发送的内容的示例:
[{"customerId":"1","customerName":"a"},{"customerId":"2","customerName":"b"}]
另一件事是您可以使用集合而不是数组:
@Path("/add")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public String addCust(@Valid List<Customer> customers){
如果你想发送这样的json:
{"customers":[{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}]}
然后你必须用“客户”属性将所有内容包装到类中:
class AddCustomersRequest {
private List<Customer> customers;
public void setCustomers(List<Customer> customers) {
this.customers = customers;
}
public void getCustomers() {
return this.customers;
}
}
并在您的API中使用它:
@Path("/add")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public String addCust(@Valid AddCustomersRequest customersReq){