Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何创建从客户端接受对象列表的REST服务,以及如何创建客户端。_List_Rest - Fatal编程技术网

List 如何创建从客户端接受对象列表的REST服务,以及如何创建客户端。

List 如何创建从客户端接受对象列表的REST服务,以及如何创建客户端。,list,rest,List,Rest,我正在尝试创建一个REST服务,它接受来自客户端的对象列表并返回一个zip文件。 我知道如何归还zip文件。 但我现在正试图找出一种方法,将对象列表从REST客户端/浏览器传递到REST服务,以及如何在REST服务中接受该列表 这应该通过XML输入完成吗? 或者@consumes注释可能会有所帮助 非常感谢 Som你需要更清楚地思考你想做什么。没有真正好的理由来获取对象列表并返回它们的ZIP文件;您还可以使用本地zip程序(几乎所有计算机都有)。这表明我们需要考虑一些合理的东西:例如,返回一个Z

我正在尝试创建一个REST服务,它接受来自客户端的对象列表并返回一个zip文件。 我知道如何归还zip文件。 但我现在正试图找出一种方法,将对象列表从REST客户端/浏览器传递到REST服务,以及如何在REST服务中接受该列表

这应该通过XML输入完成吗? 或者@consumes注释可能会有所帮助

非常感谢


Som

你需要更清楚地思考你想做什么。没有真正好的理由来获取对象列表并返回它们的ZIP文件;您还可以使用本地zip程序(几乎所有计算机都有)。这表明我们需要考虑一些合理的东西:例如,返回一个ZIP的对象名列表,这很有意义。你也可以做一些其他明智的事情,但你必须在头脑中想出你想要发生的事情

因为您提到了“@consumes annotation”,所以我假设您使用的是JAX-RS(即Java)。这很好,因为完全可以用它来实现即时拉链生成;要生成的内容类型是
application/zip
。我发现,处理要返回的事物的描述列表规范的最简单方法是作为一个包装列表,在这个列表中,您使用类似JAXB的东西来进行映射(这为您提供了XML支持;一些框架还支持来自相同数据模型的JSON)。要创建包装列表,请使用以下内容:

@XmlRootElement
公共类包装器{
@XmlElement
公共清单项目;
}
然后生成/处理如下XML文档(三项列表):


福
...
酒吧
您需要设置<代码> @消费< /COD>注释,以便接受的内容类型是“代码>应用程序/XML (至少),还考虑涉及什么类型的操作以及在什么资源上。


[编辑]:为了创建一个以字符串列表作为参数的REST服务,最简单的方法实际上是使用包装器对象,如上所述。(您不能获取原始列表;当它处于联机状态时,它需要是格式良好的XML文档。)然后,我们设置带注释的服务方法,如下所示:

@POST
@路径(“某处/{id}”)
@使用(“应用程序/xml”)
@生成(“应用程序/zip”)
公共响应getSomeBytesForList(@PathParam(“id”)字符串id,包装器请求){
List items=req.item;//例如。。。
byte[]zip=generateZipBytes(id,items);//或者
返回Response.ok(zip).type(“application/zip”).build();
}
关键是
req
参数(当然名称是任意的)是唯一没有注释的参数,它属于启用JAXB的类型,并且有一个整体
@Consumes(“application/xml”)
注释来启用请求主体的JAXB处理。(我通过直接生成
响应
来处理ZIP的返回,而不是依赖框架来为我进行处理;这让我可以更精确地控制内容类型处理。)


还需要注意的是,一些框架还可以将JAXB注释的对象作为JSON文档进行传输,只需进行一些额外的注释;您只需声明该方法可以接受
@Consumes
注释中的“
application/xml
”和“
application/json
”。我不知道这是否适用于您正在使用的框架(我只使用ApacheCXF对其进行了测试)。

您需要更清楚地思考您希望做什么。没有真正好的理由来获取对象列表并返回它们的ZIP文件;您还可以使用本地zip程序(几乎所有计算机都有)。这表明我们需要考虑一些合理的东西:例如,返回一个ZIP的对象名列表,这很有意义。你也可以做一些其他明智的事情,但你必须在头脑中想出你想要发生的事情

因为您提到了“@consumes annotation”,所以我假设您使用的是JAX-RS(即Java)。这很好,因为完全可以用它来实现即时拉链生成;要生成的内容类型是
application/zip
。我发现,处理要返回的事物的描述列表规范的最简单方法是作为一个包装列表,在这个列表中,您使用类似JAXB的东西来进行映射(这为您提供了XML支持;一些框架还支持来自相同数据模型的JSON)。要创建包装列表,请使用以下内容:

@XmlRootElement
公共类包装器{
@XmlElement
公共清单项目;
}
然后生成/处理如下XML文档(三项列表):


福
...
酒吧
您需要设置<代码> @消费< /COD>注释,以便接受的内容类型是“代码>应用程序/XML (至少),还考虑涉及什么类型的操作以及在什么资源上。


[编辑]:为了创建一个以字符串列表作为参数的REST服务,最简单的方法实际上是使用包装器对象,如上所述。(您不能获取原始列表;当它处于联机状态时,它需要是格式良好的XML文档。)然后,我们设置带注释的服务方法,如下所示:

@POST
@路径(“某处/{id}”)
@使用(“应用程序/xml”)
@生成(“应用程序/zip”)
公共响应getSomeBytesForList(@PathParam(“id”)字符串id,包装器请求){
List items=req.item;//例如。。。
byte[]zip=generateZipBytes(id,items);//或者
返回Response.ok(zip).type(“application/zip”).build();
}
关键是
req
参数(当然,名称是任意的)