我在服务器端使用Java Jersey,并且正在使用@BeanParam通过JSON收集POST参数,但是@BeanParam类只是无法获取它们。

API:

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


@BeanParam类:

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


因此,如果客户端发布JSON像这样:

{
  "id": 12345
}


SyncRequestParams的ID仍为0,而不是12345

我在这里没有做什么?

谢谢

最佳答案

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

Using @BeanParam要求使用jax-rs param注释(@FormParam@QueryParam等)对bean字段进行注释。然后,运行时创建一个bean,并使用参数值填充字段。由于您的id没有参数注释(并且请求不包含此类参数),因此它仍为0。

您想要的是将POST请求的JSON有效内容解析为SyncRequestParams的实例,因此您应该简单地编写

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

09-30 13:55
查看更多