将 `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
。
我在 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
。