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