OG *_*ude 11 java rest json jersey
我正在使用Jersey 1.11在Java中构建RESTful Web服务,并且在实现消耗JSON-ised实体列表的方法时遇到问题.单实例方法工作正常.
我得到的错误是:
Status 400 - Bad Request. The request sent by the client was syntactically incorrect.
Run Code Online (Sandbox Code Playgroud)
我的方法签名如下所示:
@POST
@Path("/some-path/{someParam}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String createBatch(List<MyEntity> myEnts, @PathParam("someParam") String someParam)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我在请求中发送的MyEntityJSON 是一个JSON对象数组:
[{"field1" : value1, "field2" : value2}, {"field1" : value3, "field2" : value4}, ...]
Run Code Online (Sandbox Code Playgroud)
之前已经提出了类似的问题,一个直接的建议是将消费的媒体类型更改为文本并手动反序列化JSON,但我更喜欢更清洁的解决方案.
我发送的JSON在这种情况下是否有效,或者我是否需要顶级{}即包装器实体?这似乎有点不自然.
谢谢,
/大卫
我认为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;
}
Run Code Online (Sandbox Code Playgroud)
并修改您的Methode:
@POST
@Path("/some-path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String createBatch(Example example)
{
...
}
Run Code Online (Sandbox Code Playgroud)
你的JSON应该是这样的:
{
"param":"someParam",
"entities":[
{"field1" : value1, "field2" : value2}, {"field1" : value3, "field2" : value4}, ...]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35158 次 |
| 最近记录: |