Jaxrs 多部分

2023-12-29

我正在尝试向 jaxrs 服务执行请求,该服务的媒体类型设置为multipart/form-data。该请求包含实体列表(xml)和图像(png,二进制)。我已按照中所述创建了请求this https://stackoverflow.com/questions/2793150BalusC 的线程。

在wireshark中检查后,该请求似乎没问题,除了ip标头校验和错误之外。(说一些关于“可能是由IP校验和卸载引起的”。)

我这里的大问题是如何在服务端处理多部分请求。我不希望包含来自 apache.cxf、resteasy 或类似内容的任何库。我想要依赖的只是 jaxrs api。

请求中的两个部分都有名称deliveries and signature,其中签名是以二进制形式发送的 png 图像文件。交货列表应从 xml 中解析(实体具有xmlrootelement注释等,所以这部分单独工作)。我尝试过用这种方式来阅读不同的部分,但这确实是一个不可能的事情;

@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.
}

这当然不起作用,如果我在 Websphere 上运行请求,它会给出 404 http 状态代码,而当我向嵌入式 openejb(在我们的集成测试框架中)运行请求时,它会给出 415。如果我删除FormParam注释请求成功。

如何仅使用 jaxrs api 读取多部分请求的不同部分?

EDIT好的,所以我改变了PUT to POST,并添加了一个@Encoding对参数的注释如下:

@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,并且我无法从中读取任何字节。

我在这里错过了一个要点吗?


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

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

有关如何使用 Clerezza jaxrs.utils 的示例,请参阅第 105 行。如果您不使用 OSGi(通过白板注册资源),则必须将 org.apache.clerezza.jaxrs.utils.form.MultiPartFormMessageBodyReader 添加到您的应用程序中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jaxrs 多部分 的相关文章

随机推荐

  • 从 TGridPanel 中删除控件

    我正在使用 TGridPanel 来管理多个面板 我创建面板并使用如下代码将它们添加到 GridPanel var pnl TPanel begin pnl TPanel Create GridPanel2 pnl Caption Pane
  • jQuery 为某些元素添加类

    我有一个像这样的多级菜单 ul li item 1 ul li item 1 1 li li item 1 2 li ul li li item 2 li li item 3 ul li item 3 1 li li item 3 2 li
  • 需要 span.class 和 p 来扩展切换

    我有一个作品集网页 当单击项目时 我需要在其中显示描述和 图像 标签 为此 我使用切换 javascript 我目前有这段代码 我希望在单击项目时 span class 和段落都展开 否则我希望这两个元素在页面上保持隐藏 现在我无法使 sp
  • CSS 禁用滚动

    我在我们的一个网站上遇到了一个问题 在 IE9 中 页面有一个垂直滚动条 但不能使用鼠标滚轮 方向键 pgup pgdwn 进行滚动 滚动的唯一方法是实际单击 按住并移动滚动条 我从CSS中删除了以下内容 overflow x hidden
  • 如何创建类似于 Mail 或 Facebook 应用程序中的“收件人”字段?

    有谁知道如何创建像 Mail 或 Facebook 应用程序中那样的 收件人字段 从 A Z 列表添加地址时 表示该地址的蓝色组件将添加到文本字段 有没有提供这个功能的类 还是需要我们自己实现 没有内置框架 您需要自己实现它或使用开源组件之
  • 执行 git apply 时出现错误“删除 1 个前导路径名组件时 git diff header 缺少文件名信息”

    我通过命令创建了一个 diff 文件 git no pager diff no index stat pathA pathB gt diff log 接下来 我执行了一个命令 git apply index ignore space cha
  • 如何使用静态 C++ 库扩展 Lua?

    我有一个使用 Lua 5 2 1 的 Visual Studio 2008 C 03 应用程序 我想用一个名为 foo 的模块扩展Lua 但是当我调用require foo 在我的 Lua 脚本中 我收到错误 foo test lua 1
  • 我可以将 EJB Stateless Bean 与 CDI 一起使用来维护用户会话吗?

    基于这篇文章http www adam bien com roller abien entry ejb 3 1 killed the http www adam bien com roller abien entry ejb 3 1 kil
  • ngserve 命令首先显示错误,最后编译成功

    我使用最新的 Angular 版本在我的计算机上本地设置了 Angular 项目 每当我使用 CLI 命令作为 ng 服务运行该项目时 它都会首先以红色显示错误 这是一个用于测试或调试 Angular 应用程序的简单服务器 本地 尚未经过安
  • 将图像添加到导航项的标题

    我想在导航栏标题的左侧添加一个徽标 title 属性似乎只接受 NSString 将图像添加到导航栏的最佳方法是什么 您可以将标题视图替换为如下图像 navigationItem titleView UIImageView alloc in
  • conda-forge 存储库是否需要 Anaconda 商业版许可证?

    我认为在 Anaconda 最近的许可证变更之后我需要获得 Anaconda 的商业许可证 不过我很好奇 访问 conda forge 存储库是否需要商业许可证 因为它是社区存储库 或者这仅适用于主要的 anaconda 存储库 我一直无法
  • PHP Readfile 方法的安全问题

    嘿 使用时有什么安全问题需要担心吗readfilePHP 中的方法 我想使用 readfile 方法来获取存储在各种第三方服务器上的文件的 URL 然后我将文件提供给用户 直观上 似乎存在风险 因为 URL 可以指向任何文件 另一方面 我只
  • 从 List.map() 获取迭代索引

    我在字母列表上编写了一个迭代 并使用 地图 类将内部卡片放在屏幕上 在代码中 您可以看到我做了一行 并使用 map 将卡片上的所有用户板打印到屏幕上 我想在里面添加一些逻辑 所以我需要获取元素的 id 用于录制事件 有什么办法可以做到这一点
  • 为什么 android:buttonStyle 不设置按钮样式?

    所以 我有一个奇怪的问题 我的应用程序非常简单 主要活动只有一个按钮 并且清单中设置的活动的自定义主题 我可以确认主题有效并被选中 因为我可以更改活动背景或字体颜色 例如 但是当我尝试为我的活动中的所有按钮设置样式时 它不起作用 这是样式
  • 在 Bukkit 中设置原理图的块数据?

    我正在尝试加载并粘贴 schematicbukkit 中的文件 不挂钩 MCEdit API 下面是我用来粘贴原理图的函数 方法 粘贴时 我不断收到NullPointerException在粘贴过程中 当我记录放置的物品时 我看到草块 石头
  • 从控制台禁用/更改 Spring Boot 的 ApplicationContext 的时间戳

    每次我们启动 Spring Boot 应用程序时 Spring Boot 都会打印以下行 2017 07 20 00 43 53 605 INFO 3857 main ationConfigEmbeddedWebApplicationCon
  • 目前是否有适用于 iOS4 和 Xcode4 的 BDD 解决方案?

    所以我一直在努力寻找 iOS4 和 Xcode4 的可靠 BDD 替代品 但一切似乎要么很久以前就被放弃了 要么sortof工作但相当混乱 我找到的最好的解决方案称为 Cedar 主要文章 http pivotallabs com user
  • FileSystemWatcher - 目标目录所需的最低权限?

    使用 NET FileSystemWatcherhttp msdn microsoft com en us library system io filesystemwatcher aspx http msdn microsoft com e
  • 使用 Google 登录时的服务条款和隐私政策链接不起作用

    我已经实现了 firebase 身份验证 UI 包括电子邮件和 Google 作为提供商 我还提供了服务条款和隐私政策链接 如下所示 List
  • Jaxrs 多部分

    我正在尝试向 jaxrs 服务执行请求 该服务的媒体类型设置为multipart form data 该请求包含实体列表 xml 和图像 png 二进制 我已按照中所述创建了请求this https stackoverflow com qu