当前位置: 首页 > 知识库问答 >
问题:

Jaxrs多部分

韦繁
2023-03-14

我试图执行一个对jaxrs服务的请求,该服务的媒体类型设置为multipart/form-data。这个请求包含一个实体列表(xml)和一个映像(png,二进制)。我已经通过Balusc创建了这个线程中描述的请求。

在wireshark中检查后,请求似乎可以,除了ip头校验和错误之外。(表示“可能是由ip校验和卸载引起的”)

我这里最大的问题是如何在服务端处理多部分请求。我不希望包含Apache.cxf、resteasy或任何类似的库。我只想依靠jaxrs API。

@PUT
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(@FormParam("deliveries") List<Delivery> deliveries, @FormParam("signature")File signature) {
    //do something with the signature(image) and the list of deliveries.
}
@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
    @Encoded @FormParam("deliveries") String deliveries,
    @Encoded @FormParam("signature") File signature) {

}

现在我将xml作为文本字符串获取,但是我不能自动将其解压缩到交付列表中,即使这部分有效负载的content-type设置为application/xml。另一个问题是,我收到的文件长度==0,我无法从中读取任何字节。

我是不是漏掉了一个要点?

共有1个答案

姚才捷
2023-03-14

实际上,我很难理解为什么JAX-RS规范没有对此进行标准化支持(我刚刚创建了https://java.net/jira/browse/jax_rs_spec-413来解决这个问题)。

然而,仍然可以以实现独立的方式支持多部分表单。您要么为MultiPart form编写自己的MessageBodyReader,要么使用像Apache Clerezza jaxrs.utils这样的库,它提供了一个MultiPartBody对象,该对象对应MessageBodyReader。这个库不依赖于实现规范,因此您的应用程序将运行在任何jax-rs实现上。

有关如何使用Clerezza jaxrs.utils的示例,请参见http://svn.apache.org/viewvc/stanbol/trunk/development/archetypes/stateless-webmodule/src/main/resources/archetype-resources/src/main/java/multienhancer.java?revision=1465777&view=markup中的第105行。如果您没有使用OSGi(带有白板注册资源),则必须将org.apache.clerezza.jaxrs.utils.form.MultipartFormMessageBodyReader添加到您的应用程序中。

 类似资料:
  • 有人能帮我用Apache FUSE ESB配置两个具有相同基本URI的JAX-RS服务吗?我使用的JBoss Fuse6.0版本包含karaf容器、Apache Camel和CXF(JAX-RS)。配置是用Blueprint完成的。当我只配置一个JAX-RS服务时,一切都很好。 我尝试使用基本URI为两个JAX-RS bean提供服务。第一个bean为,第二个bean为。 在camel中如何配置这

  • 问题内容: 我用GET,POST,UPDATE和DELETE四种方法创建了Rest服务。这些方法建立了到数据库的连接以检索和存储数据。 现在,我想测试每种方法。我为此使用了Jersey测试框架。只要删除代码,真正对数据库进行调用的代码就可以正常工作。当我留下进行数据库调用的代码时,它引发了一个异常,即它无法连接到数据库。 编辑:我做了一些研究,并使用了依赖注入。数据库调用移到一个单独的类,但是我仍

  • 我试图使用“swagger jaxrs maven”插件从源代码生成RESTful API文档。 我关注了这个网站:swagger-jaxrs-maven 但是maven抱怨它找不到这个插件,所以我在maven中央存储库中搜索了它 它只在groupId com下找到它。绿色意见。大摇大摆所以我做了相应的修改。 但现在我发现了这个错误: [错误]无法执行目标com。绿色意见。招摇过市:jaxrs g

  • 免责声明:我刚刚开始使用OSGI,所以请忍受我和我的知识不足... 为了本练习,假设我有一个基于泽西岛 (2.17.0) 的 REST 应用程序在 OSGI 环境中的 Jetty (9.2.10) 下运行,它为用户提供了一些通过 SOAP 从单独的服务器收集的统计信息。 我现在尝试在另一个应用程序中重用一些现有代码,该应用程序应该通过JMS(或其他东西)检索统计信息。 我的目的是在捆绑包中为客户端

  • 我一直得到以下错误 org.springframework.web.multipart.support.MissingServletRequestPartException:找不到请求部分“model”。 当向spring mvc控制器发送多部分请求时。 这是请求: 谢谢你,詹姆斯

  • 我试图用python写的lambda (aws)完成多部分上传。下面是我正在使用的代码。大约有120个部件,总大小为30GB。下面的操作似乎没有在5分钟内完成,因此lambda关闭,上传似乎没有完成。S3提供异步多部分上传功能吗?我相信这将确保文件得到合并,不管lambda关闭。