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