【发布时间】:2017-10-03 00:16:17
【问题描述】:
我想要一个通用的批量更新调用,客户端发送一个对象数组供我更新。请求的正文如下所示:
请求正文
[
{
"id": 1,
"name": "noe",
"phone": "1234"
},
{
"id": 2,
"name": "noea",
"phone": "1235"
}
]
我环顾四周,似乎大多数编组提供商都可以在请求正文中处理此问题。我尝试了几种不同的方法:
E[ ] 或列表
如何打开它试图读取的流?我错过了一些注释还是有错误的@Consumes 注释?我进行了一些搜索,但找不到任何描述我遇到的问题的内容。
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit( E[] objects ) {
}
或者
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/mutliedit" )
public Response edit( List<E> entities ) {
}
生产
javax.json.JsonException: Unable to detect charset due to Stream closed
root cause: java.io.IOException: Stream closed
包装类
之后我尝试将数组打包到包装类中。
public class EntityList<E> implements Serializable {
private List<E> entities;
}
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit( EntityList<E> entities )
{
}
这会导致我的映射器 API Johnzon Mapper 出现映射异常。
org.apache.johnzon.mapper.MapperException: Unsupported [<list of objects here>] com.my.project.EntityList<E>
我只想接受一个对象数组。我在here 或here 等一系列不同的问题中看到了它,但它对我不起作用。
更新: 如果我做一个非通用版本,我可以让前两个选项工作。如果我将它的通用版本子类化并尝试覆盖它,它仍然会死掉,并出现与所述相同的异常。
【问题讨论】:
-
您是否配置了合适的阅读器来进行对象解析?我相信this线程可以帮助你。
标签: java arrays json rest request