Java Jersey 服务器未获得 POST 参数

Java Jersey server not getting POST parameters

我在服务器端使用 Java Jersey,我使用 @BeanParam 通过 JSON 收集 POST 参数,但是 @BeanParam class只是没有得到它们。

API:

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public Response sync(@BeanParam SyncRequestParams request) {
         .........
}

@BeanParam class :

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SyncRequestParams {
   @JsonProperty("id")
   private int id;
}

因此,如果客户 POST 喜欢 JSON:

{
  "id": 12345
}

SyncRequestParams 的 id 仍为 0,而不是 12345

我在这里没有做什么?

谢谢 是

您需要使用 @FormParam 注释来注释您想要生成的 class 字段:

public class SyncRequestParams {
   @FormParam("id")
   private int id;
}

查看更详细的解释here

@BeanParam 不能用于将 JSON 负载映射到 bean。

Using @BeanParam 要求使用 jax-rs 参数注释(@FormParam@QueryParam 等)对 bean 字段进行注释。运行时然后创建一个 bean 并使用参数值填充字段。因为你的id没有参数注解(而且请求中也不包含这样的参数)所以还是0.

你想要的是 POST 请求的 JSON 有效负载被解析为 SyncRequestParams 的实例,因此你应该简单地写

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public Response sync(SyncRequestParams request) {