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

RK3*_*RK3 3 java rest json web-services jersey

我正在使用Jersey.Am开发一个休息Web服务,这对于webservices来说是一个新的东西.我需要将客户列表作为输入传递给rest webservice.在实现它时遇到了问题.

下面是我的客户对象类

@Component
public class customer {
private String customerId;
private String customerName;
Run Code Online (Sandbox Code Playgroud)

我的终点如下.addCust是调用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"}}
Run Code Online (Sandbox Code Playgroud)

但是球衣无法将json阵列转换为客户阵列.它返回400.日志显示"c没有可行的选择".如何将Json数组作为输入传递给webservice并转换为Array或ArrayList.任何帮助赞赏.

Mac*_*yra 6

您的json无效,字段名称应始终双引号,并且数组放在[]内,例如:

{"customers":[{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}]}
Run Code Online (Sandbox Code Playgroud)

这就是为什么杰克逊不能解散它.但是这个json永远不适合你的api.以下是您应该发送的示例:

[{"customerId":"1","customerName":"a"},{"customerId":"2","customerName":"b"}]
Run Code Online (Sandbox Code Playgroud)

另一件事是您可以使用集合而不是数组:

@Path("/add")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public String addCust(@Valid List<Customer> customers){
Run Code Online (Sandbox Code Playgroud)

如果你想发送像这样的json:

{"customers":[{"customerId":"1","customerName":"a"},
{"customerId":"2","customerName":"b"}]}
Run Code Online (Sandbox Code Playgroud)

然后你必须用"客户"属性将所有内容包装到类中:

class AddCustomersRequest {
  private List<Customer> customers;

  public void setCustomers(List<Customer> customers) {
      this.customers = customers;
  }

  public void getCustomers() {
     return this.customers;
  }
}
Run Code Online (Sandbox Code Playgroud)

并在您的API中使用它:

@Path("/add")
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public String addCust(@Valid AddCustomersRequest customersReq){
Run Code Online (Sandbox Code Playgroud)