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