【问题标题】:POSTing `JSON` to an `ArrayList` gets the response "Request JSON Mapping Error"将 `JSON` 发布到 `ArrayList` 会得到响应“请求 JSON 映射错误”
【发布时间】:2015-06-11 01:09:06
【问题描述】:

我在将JSON 发布到ArrayList 时遇到问题

我有一个班级计划

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

还有一个 ArrayList 的 Plan - 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"
    }
  ]
}

发布单个计划 createPlan 可以正常工作。
但是,当我尝试以 GET 返回的相同格式发布到 createPlans 时,我得到了响应 "Request JSON Mapping Error"

JSON 格式是否错误?我的 REST 定义错了吗?

【问题讨论】:

    标签: json arraylist resteasy


    【解决方案1】:

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

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

    @Path("/plan")
    

    对于第一个,并且

    @Path("/plans")
    

    第二个。

    【讨论】:

    • 解决了最初的问题,现在到 /plans 的 POST 到达了我的实现 - createPlans()。
    • 我很高兴。如果您愿意,请支持我的回答,这样我可以获得更多积分:)。
    • 解决了最初的问题,现在到 /plans 的 POST 在 createPlans() 开始处到达断点。但是,plans 始终是一个空的 PlanList。
    • 发布另一个问题,人们会帮助你。
    【解决方案2】:

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

    灵魂是为这些方法制作两个不同的@Path

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2020-09-13
      • 1970-01-01
      • 2017-02-13
      • 2014-07-12
      • 2015-12-17
      • 2011-01-10
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多