如何在泽西Rest Webservice中接受json数组输入

时间:2015-09-10 19:34:42

标签: java json web-services rest jersey

使用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。任何帮助表示赞赏。

1 个答案:

答案 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){