Jersey,如何 POST JSON 对象列表?

2024-03-17

我正在使用 Jersey 1.11 在 Java 中构建 RESTful Web 服务,并且在实现使用 JSON 化实体列表的方法时遇到问题。单实例方法工作正常。

我得到的错误是:

Status 400 - Bad Request. The request sent by the client was syntactically incorrect.

我的方法签名如下所示:

@POST
@Path("/some-path/{someParam}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String createBatch(List<MyEntity> myEnts, @PathParam("someParam") String someParam)
{
   ... 
}

我在请求中发送的 JSON 是一个数组MyEntityJSON 对象:

[{"field1" : value1, "field2" : value2}, {"field1" : value3, "field2" : value4}, ...]

类似的问题之前已经被问过,一个直接的建议是将消费的媒体类型更改为文本并反序列化手动 JSON https://stackoverflow.com/questions/11237102/jax-rsjersey-to-consumes-array-of-json-object-in-post-request但我更喜欢更清洁的解决方案。

我发送的 JSON 在这种情况下是否有效,或者我是否需要顶级{}即包装实体?这也显得有些不自然。

谢谢你,

/David


我认为 PathParam 以及由 Jersey(JAX-RS) 解组的 Param 是不可能的。 请尝试删除 PathParam 参数。

如果您需要第二个参数,请创建一个像这样的新类

@XmlRootElement(name = "example")
public class Example {
  @XmlElement(name = "param")
  private String param;
  @XmlElement(name = "entities")
  private List<MyEntity> entities;
}

并修改您的 Methode :

@POST
@Path("/some-path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String createBatch(Example example)
{
   ... 
}

你的 JSON 应该是这样的:

{
 "param":"someParam",
 "entities":[
   {"field1" : value1, "field2" : value2}, {"field1" : value3, "field2" : value4}, ...]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey,如何 POST JSON 对象列表? 的相关文章

随机推荐