Java Jersey服务器没有获取POST参数

时间:2016-03-09 22:12:19

标签: java web-services jersey server-side jersey-2.0

我在服务器端使用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;
}

因此,如果客户端POST一个JSON,如:

{
  "id": 12345
}

SyncRequestParams的id仍为0,而不是12345

我在这里做的不是什么?

由于 IS

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

您需要使用@FormParam注释注释要生成的类的字段:

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

查看更详细的解释here