如何在Jersey Rest Webservice中接受JSON数组输入

3

我将使用Jersey开发一个REST Web服务。对于Web服务,我还有些新手。我需要将客户列表作为输入传递给REST Web服务。但是在实现过程中遇到了一些问题。

以下是我的客户对象类:

@Component
public class customer {
private String customerId;
private String customerName;

我的端点如下所示。addCust是调用Web服务时将被调用的方法。

    @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"}}

但是Jersey无法将JSON数组转换为客户端数组。它会返回400错误。日志显示“c处没有可行的替代方法”。如何将JSON数组作为输入传递给Web服务并将其转换为数组或ArrayList?任何帮助都将不胜感激。
1个回答

6

您的JSON无效,字段名称应始终用双引号括起来,并将数组放置在[]中,例如:

{"customers":[{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}]}

这就是为什么Jackson无法拆分它。但是,这个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"}]}

接下来,您需要将所有内容包装到具有 "customers" 属性的类中:

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

JSON格式不正确。修正后,还将客户列表包装在另一个类中。 - RK3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接