将 `JSON` 发布到 `ArrayList` 得到响应 "Request JSON Mapping Error"

POSTing `JSON` to an `ArrayList` gets the response "Request JSON Mapping Error"

我在 POST 将 JSON 发送到 ArrayList

时遇到问题

我有一个class计划

 public class Plan {
    private String planId;
    private String planName;
        :
        :
}

和一个 ArrayList 计划 - PlanList

public class PlanList {
    private List<Plan> plans = new ArrayList<Plan>();
        :
        :
}

我有 POST 和 GET REST API

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Plan createPlan(@CookieParam(SmsHttpHeaders.X_SMS_AUTH_TOKEN) String token, Plan plan, @HeaderParam("Organization-Id") String organizationIdByService);

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public PlanList createPlans(@CookieParam(SmsHttpHeaders.X_SMS_AUTH_TOKEN) String token, PlanList plans, @HeaderParam("Organization-Id") String organizationIdByService);

@GET
@Produces(MediaType.APPLICATION_JSON)
public PlanList retrieveAllPlans(@CookieParam(SmsHttpHeaders.X_SMS_AUTH_TOKEN) String token, @HeaderParam("Organization-Id") String organizationIdByService);

当我获取 retrieveAllPlans 时,我得到了以下 JSON,正如我预期的那样。

{
  "plans": [
    {
      "planId":"1",
      "planName":"Plan 1"
    },
    {
      "planId":"2",
      "planName":"Plan 2"
    },
    {
      "planId":"3",
      "planName":"Plan 3"
    }
  ]
}

POST创建单个计划 createPlan 工作正常。
但是,当我尝试 POST 以与 GET returns 相同的格式创建计划时,我得到了响应 "Request JSON Mapping Error".

JSON 格式有误吗?我的 REST 定义有误吗?

您的两个 post 函数都被映射到同一个 http 端点。 class 上可能有一个 @Path 符号,为它的所有方法指定一个端点,RestEasy 试图通过 http 方法(post、get 等)来区分。

您需要为每个 post 函数指定唯一的 @Path 注释。说:

@Path("/plan")

对于第一个,

@Path("/plans")

第二次。

问题是,当您尝试从 POST 到 createPlans 时,请求正在由 createPlan 方法处理,因为这两种方法都处理相同的 URL.

解决方案是为这些方法制作两个不同的@Path