Java 您如何接受列表<;E>;还是将数组E[]插入REST端点?
我希望有一个通用的批量更新调用,其中客户端发送一个对象数组供我更新。请求主体如下所示: 请求正文Java 您如何接受列表<;E>;还是将数组E[]插入REST端点?,java,arrays,json,rest,request,Java,Arrays,Json,Rest,Request,我希望有一个通用的批量更新调用,其中客户端发送一个对象数组供我更新。请求主体如下所示: 请求正文 [ { "id": 1, "name": "noe", "phone": "1234" }, { "id": 2, "name": "noea", "phone": "1235" } ] 我环顾四周,似乎大多数编组提供者都可以在请求主体中处理这个问题。我尝试了几种不同的方法: E[]或列出参数 如何打开它试图从中读取的流?我是否遗漏了
[
{
"id": 1,
"name": "noe",
"phone": "1234"
},
{
"id": 2,
"name": "noea",
"phone": "1235"
}
]
我环顾四周,似乎大多数编组提供者都可以在请求主体中处理这个问题。我尝试了几种不同的方法:
E[]或列出 @PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit( E[] objects ) {
}
或
包装类
之后,我尝试将数组打包到包装器类中
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 )
{
}
公共类EntityList实现可序列化{
私人名单实体;
}
@放
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
@路径(“/multiedit”)
公共响应编辑(EntityList实体)
{
}
这会导致我的映射器api Johnzon mapper出现映射异常
org.apache.johnzon.mapper.MapperException: Unsupported [<list of objects here>] com.my.project.EntityList<E>
org.apache.johnzon.mapper.MapperException:Unsupported[]com.my.project.EntityList
我只想接受一个对象数组。我看到它在一堆不同的问题中完成,比如or,但它对我不起作用
更新:
如果我使用非通用版本,我可以让前两个选项起作用。如果我对它的泛型版本进行子类化并尝试覆盖它,它仍然会死掉,并出现与前面所述相同的异常。是的,我相信您缺少
@QueryParam
注释
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit( @QueryParam("entities") EntityList<E> entities )
{
}
@PUT
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
@路径(“/multiedit”)
公共响应编辑(@QueryParam(“实体”)EntityList实体)
{
}
您必须使用@RequestBody
链接:
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit(@RequestBody EntityList<E> entities )
{
}
@PUT
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
@路径(“/multiedit”)
公共响应编辑(@RequestBody EntityList entities)
{
}
您是否配置了适当的读取器来进行对象解析?我相信线程可以帮助你们。若我并没有弄错的话,我认为RequestBody只适用于Spring;我们没有使用SpringQueryParam来表示URL上的参数,例如:/?name=bob。我不确定他是如何放置列表的,但你也可以将列表建立为@QueryParams
。不管怎样,也许他应该使用@UriInfo
?
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit( @QueryParam("entities") EntityList<E> entities )
{
}
@PUT
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
@Path( "/multiedit" )
public Response edit(@RequestBody EntityList<E> entities )
{
}