在 Jersey JAX-RS 服务器中返回大对象时如何设置 Content-Length

2024-01-09

我有时想返回一个大的(几个 MB)二进制对象作为 JAX-RS 资源方法的响应。我知道对象的大小,并且希望在响应上设置 Content-Length 标头,并且不希望使用分块传输编码。

在 Jersey 1.x 中,我使用自定义 MessageBodyWriter 解决了这个问题:

public class Blob {
  public InputStream stream;
  public long length;    
}

@Provider
public class BlobWriter extends MessageBodyWriter<Blob> {

  public boolean isWriteable(Class<?> type, Type genericType,
                               Annotation[] annotations, MediaType mediaType) {
    return Blob.class.isAssignableFrom(type);
  }

  public long getSize(T t, Class<?> type, Type genericType, Annotation[] annotations,
                        MediaType mediaType) {
    return t.length;
  }

  public void writeTo(T t, Class<?> type, Type genericType, Annotation[] annotations,
                      MediaType mediaType,
                      MultivaluedMap<String, Object> httpHeaders,
                      OutputStream entityStream)
            throws java.io.IOException {
    org.glassfish.jersey.message.internal.ReaderWriter.writeTo(t.stream, entityStream);
  }
}

但是当我升级到 Jersey 2.x 时,这个方法就停止工作了,因为 JAX-RS/Jersey 2 不再关心 MessageBodyWriter.getSize() 。我怎样才能用 Jersey 2 实现这一目标?


似乎可以使用提供的 httpHeaders 从 MessageBodyWriter.writeTo() 设置 Content-Length 标头:

  public void writeTo(T t, Class<?> type, Type genericType, Annotation[] annotations,
                      MediaType mediaType,
                      MultivaluedMap<String, Object> httpHeaders,
                      OutputStream entityStream)
            throws java.io.IOException {
    httpHeaders.addFirst(HttpHeaders.CONTENT_LENGTH, t.length.toString);
    org.glassfish.jersey.message.internal.ReaderWriter.writeTo(t.stream, entityStream);
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jersey JAX-RS 服务器中返回大对象时如何设置 Content-Length 的相关文章

  • @NotNull 注释未检查 Jersey REST 资源中的空查询参数

    我正在尝试使用 javax validation validation api 进行验证 QueryParam参数 我已按照以下步骤操作 添加依赖项
  • HK2 MethodInterceptor 与 Jersey 资源

    如何设置aopMethodInterceptor使用泽西岛资源 这是我尝试过的 如下this https hk2 java net 2 2 0 aop example html文档 第 1 步 拦截服务 public class MyInt
  • 使用 Wildfly 在 Jersey 上使用 @PersistenceUnit 注入 EntityManagerFactory

    我尝试使用 PersistenceUnit 注入 EntityManagerFactory 但它始终为空 我认为我的 persistence xml 没问题 因为我可以使用以下代码获取 EntityManager EntityManager
  • 字段的特定 MessageBodyWriter

    假设我在 JAX RS 1 环境 带有 Jackson 提供程序的 RestEasy 2 中有一个数据类 如下所示 class Foo int id String name Bar bar with Bar being class Bar
  • 在 JerseyTest 中访问 Spring beans

    我试图弄清楚如何从 JerseyTest 的子类访问 Spring bean 扩展 JerseyTest 我已经设法在测试中加载 Spring 上下文 但我还没有弄清楚如何访问 spring 上下文 我的设置如下所示 public abst
  • 使用 https 的 Java Jersey RESTful Web 服务

    我是 Java EE 的新手 正在开发一个 RESTful API 其中每个 API 调用用户都会发送编码的凭据 我的问题是如何通过默认的 http 实现 https 协议并确保我的连接安全 我正在使用 Jersey Restful Web
  • 如何在服务器上获取球衣日志?

    我正在使用球衣进行 REST WS 如何在服务器端启用球衣日志 很长的故事 我收到客户端异常 但我在 tomcat 日志中没有看到任何内容 它甚至没有到达我的方法 由于堆栈跟踪显示 toReturnValue 它确实从服务器获取了一些内容
  • 使用 SSL 和代理设置的 Rest 客户端获取连接超时

    我正在使用带有忽略 ssl 的 Rest 客户端 它工作正常 但在将来我尝试使用客户端证书进行的生产中将无法工作 我有 ca 证书和客户端证书 我用它创建了一个客户端 但我收到错误 Exception in thread main com
  • Jersey 对空列表的响应为 null 而不是 {}

    我有一个使用 Jersey 的 JAX RS REST 服务 我使用 JAXB 进行 JSON 编组 即 XmlRootElement 其中一个方法返回使用 JPA 持久化的对象列表 当此列表包含条目时 它会按我的预期工作 例子 andro
  • 在 ContainerRequestFilter 中填充 spring request 作用域 bean

    我使用 jersey 1 13 和 spring 3 1 1 编写了一个在 tomcat 6 上运行的休息服务 在 tomcat 中 我使用一个领域来进行身份验证 在我的应用程序中 我需要当前用户 但我不想从每个资源中的球衣访问Securi
  • 如何在 jersey-client java 中实现重试机制

    我正在使用 jersey client 进行一些 http Rest api 调用 现在我想对失败的请求进行重试 假设返回错误代码不是 200 那么我想重试几次 如何使用 Jersey 客户端做到这一点 虽然已经晚了 但您可以使用几种不同的
  • 泽西岛宁静服务通信(IncompleteClassChangeError)

    我在 JDK 1 6 http 服务器上创建了一个基于 jersey 1 12 的 Restful 服务外观 当我在 Eclipse 中启动应用程序时 一切正常 我可以毫无问题地与外观进行通信 但是当我使用启动脚本通过控制台启动应用程序时
  • Jersey 客户端异步 POST 请求不等待响应

    我创建了一个简单的 Jersey 客户端 它能够成功地使用有效负载执行 POST 请求 但现在它正在等待来自 http 端点的响应 public void callEndpoint String endpoint String payloa
  • 编组/取消编组 使用 JAXB 列出 Jersey JAX-RS 中的对象

    早上好 今天早上 当我浏览泽西岛实体提供商时MessageBodyReaders and MessageBodyWriter我遇到了以下问题 我想编写一个资源方法和客户端 返回自定义对象列表 媒体类型是application xml 所以我
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • 在 Java Jersey 2 JAX-RS 中初始化单例

    我是泽西岛 2 22 2 的新手 请耐心等待 我正在创建一个与 LDAP 服务器交互的 REST 服务 用于存储 删除和检索用户数据 该服务通过执行加密 解密充当安全中介 在使用 REST 服务之前必须进行相当多的初始化 并且我只想执行此初
  • 使用 JAX-RS 进行异步 REST 调用

    我需要创建一个 RESTful 服务 它应该以以下方式支持异步调用 当用户调用某个方法时 他会获得 http 202 代码和 url 来轮询 在其中他可以看到请求的状态 目前我使用 JAX RS 及其注释 Path public inter
  • 将 Jersey 客户端 1.x 升级到 2.x 时,UriBuilder 上出现 AbstractMethodError

    我们正在将 Web 应用程序 在 Tomcat7 上运行 从 Jersey 1 7 升级到 Jersey 2 4 1 我现在设法让服务器端工作 但是使用 jersey client 的 JUnit 测试抛出 AbstractMethodEr
  • @JsonView 如何使用球衣

    我想为一个对象返回具有不同视图的不同字段 但它总是返回所有字段 我创建了 3 个不同的视图 public class Views public static class PublicView public static class Exte
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器

随机推荐

  • pandas,按函数分组后的列名称

    我有一个简单的 Pandas Dataframe 名为purchase cat df email cat 0 email protected cdn cgi l email protection Mobiles Tablets 1 emai
  • MongoDB 主机名/URI 配置

    请注意 这看起来很长 但提供了上下文并在底部列出了我的主要问题 我研究了所有部分并包括参考资料 我用的是 这在三个独立的虚拟机上创建了两个 Mongo 服务器 主服务器和辅助服务器 和仲裁器的副本集 我没有更改任何虚拟机配置 除了打开防火墙
  • 无法在 iPhone/iPod touch 的 Safari iOS 7 中隐藏导航栏

    我不相信有任何解决方案可以使用 javascript css html 以编程方式隐藏栏 但让我尝试描述一个问题 我们是移动游戏开发团队 我们开发一款游戏已经一年了 iOS 7 发布后 我们遇到了无法隐藏导航栏的问题 一旦用户点击 Safa
  • Rails:更改操作邮件程序中的默认发件人

    我正在使用 Rails 应用程序中的操作邮件程序发送电子邮件 但它只允许一个默认发件人 这是我的 UserMailer 类 class UserMailer lt ActionMailer Base default from gt emai
  • 停止线程:标志与事件[重复]

    这个问题在这里已经有答案了 我看到了例子例如这里 https stackoverflow com a 325528 4653485使用一个Event https docs python org 3 library threading htm
  • QML:无法将[未定义]分配给

    我正在尝试将 Qt Android 程序的界面从 QWidgets 重写为 QML 我之前从未使用过它 因此错误可能非常明显且愚蠢 新界面基于ListView 看起来像 ListView id listView x 16 y 146 wid
  • 如何在 XCode 4.3 中为仅限 iPhone 的应用程序指定 iPad Retina 图标?

    我的 iPhone 应用程序图标在 iPhone Retina 和 iPad 中显示良好 但在 iPad 视网膜 模拟器和设备 上 我得到一个图标 显然包含应用程序的开始屏幕 鉴于我的应用程序仅针对 iPhone 设计 而非 通用 因此 X
  • 当我的网站打开多个选项卡时,为什么 setTimeout 会加速?

    我有一个每秒倒计时的计时器 它工作得很好 直到用户打开我的网站的 3 或 4 个选项卡 此时最新选项卡的计时器速度变为两倍或三倍 我目前只能在 IE8 中重现该错误 我之前使用的是 setInterval 并且也可以在 Firefox 中重
  • 使用itextsharp将字体嵌入到pdf中

    我尝试使用 itextsharp 5 2 1 0 嵌入字体 但出现错误 字体是 KozGoPro Light otf 经过一番研究后发现它是日语字体 我已经尝试过以下 Dim tblx1 As PdfPTable New PdfPTable
  • HTTP 标头中的“Content-Length”字段是什么?

    这是什么意思 使用标头中指定的编码的编码内容字符串的字节数 内容字符串的字符数 特别是在以下情况Content Type application x www form urlencoded 它是请求或响应正文中数据的字节数 正文是标题下方空
  • 如何将文件句柄传递给函数?

    当我运行下面的代码时我得到 Can t use string F as a symbol ref while strict refs in use at T pl line 21 其中第 21 行是 flock fh LOCK EX 我究竟
  • glDrawElements 使用了错误的 VBO?

    我正在尝试在屏幕上渲染两个不同的对象 据我所知 问题是OpenGL使用了错误的顶点缓冲区 但使用了正确的索引缓冲区 但我不太确定我目前正在做的任何事情 因为我几乎已经开始再次学习OpenGL 这是当前显示的内容 http puu sh ek
  • Python itertools 产品,但有条件吗?

    我有一个函数 fun 需要几个参数 p0 p1 对于每个参数 我给出一个可能值的列表 p0 list a b c p1 list 5 100 我现在可以为 p0 p1 的每个组合调用我的函数 for i in itertools produ
  • en_US 或 en-US,您应该使用哪一个? [复制]

    这个问题在这里已经有答案了 假设您想在数据库中存储用户首选项的区域设置 您将使用哪个值 en US 或 en US 它们是两个标准 但是您更喜欢使用哪一个作为您自己的应用程序的一部分 Updated 似乎许多网站都使用破折号而不是下划线 例
  • 以纱线集群模式在 YARN 上运行 Spark:控制台输出去了哪里?

    我按照此页面在 YARN 上以纱线集群模式运行 SparkPi 示例应用程序 http spark apache org docs latest running on yarn html http spark apache org docs
  • http-equiv="refresh" 是否保留引用信息和元数据?

    如果我设置一个这样的页面 执行重定向时浏览器是否会发送引用者信息和其他元数据 此处测试时 Firefox 和 IEdo not但铬does发送引荐来源网址 尽管这也不一致 无论它是否发送到同一域 因为我找不到任何说明什么的规范should是
  • MVC 的缓存层 - 模型还是控制器?

    我正在重新考虑在哪里实现缓存部分 您认为最合适的实施地点在哪里 在每个模型中 还是在控制器中 方法 1 伪代码 mycontroller php MyController extends Controller class function
  • 从 ActivityGroup 开始ActivityForResult?

    尝试从活动组启动活动时 我似乎无法得到任何结果 我已将 onactivityresult 放入活动和活动组中 具体来说 我试图让用户从 Intent ACTION GET CONTENT 中选择照片 视频 但我从来没有得到任何回报 我究竟做
  • 对于给定的有限代表字符串列表,正则表达式的语法推理?

    我正在分析一个大型公共数据集 其中包含许多详细的人类可读字符串 这些字符串显然是由某些常规 在形式语言理论意义上 语法生成的 逐一查看这些字符串组以了解其中的模式并不太难 不幸的是 大约有 24 000 个独特的字符串被分为 33 个类别和
  • 在 Jersey JAX-RS 服务器中返回大对象时如何设置 Content-Length

    我有时想返回一个大的 几个 MB 二进制对象作为 JAX RS 资源方法的响应 我知道对象的大小 并且希望在响应上设置 Content Length 标头 并且不希望使用分块传输编码 在 Jersey 1 x 中 我使用自定义 Messag