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[]或列出参数

如何打开它试图从中读取的流?我是否遗漏了一些注释或使用了错误的@Consumes注释?我做了一点搜索,找不到任何描述我所遇到问题的东西

    @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 ) 
{


}