将文档流发送到 Jersey @POST 端点

2023-11-22

我希望能够sendWeb 服务的一堆文档流。这将节省 Http 请求/响应开销并专注于文档本身。

在Python中你可以做这样的事情:

r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
    data={'track': 'requests'}, auth=('username', 'password'),
    stream=True)

for line in r.iter_lines():
    if line: # filter out keep-alive new lines
        print json.loads(line)

我正在寻找一个将请求传输到 Jersey Rest api 的示例。我希望看到客户端和服务器端来展示它的工作原理。但我正在努力寻找一个例子。

理想情况下,该示例将显示:

Client:
  Open request
  Iterate over huge document list
    Write document to open request stream
  Close request

Server:
  @POST method
    Open entity stream
    Iterate over entity stream while next document is available
        Process document
    Close entity stream              

如果我们做对了,您将在服务器上处理实体,同时仍在客户端上发送它们!巨大的胜利!


实现此目的的最简单方法之一是让 Jersey 为 POST 处理程序提供InputStream对于 HTTP POST 正文。该方法可以使用InputStream和您选择的 JSON 解析器来解析然后处理每个对象。

在以下示例中,杰克逊ObjectReader产生一个MappingIterator它解析并处理每个Person文档在传递到服务器时位于数组中

/**
 * Parse and process an arbitrarily large JSON array of Person documents
 */
@Path("persons")
public static class PersonResource {

    private static final ObjectReader reader = new ObjectMapper().readerFor(Person.class);

    @Path("inputstream")
    @Consumes("application/json")
    @POST
    public void inputstream(final InputStream is) throws IOException {
        final MappingIterator<Person> persons = reader.readValues(is);
        while (persons.hasNext()) {
            final Person person = persons.next();
            // process
            System.out.println(person);
        }
    }
}

同样,Jersey 客户端框架在配置了 Jackson 后可以发送文档流ObjectMapper。以下示例使用 Jersey Test 框架演示了这一点。客户端传输任意大的迭代器Person文件

public class JacksonStreamingTest extends JerseyTest {

    @Override
    protected Application configure() {
        return new ResourceConfig(PersonResource.class, ObjectMapperProvider.class);
    }

    /**
     * Registers the application {@link ObjectMapper} as the JAX-RS provider for application/json
     */
    @Provider
    @Produces(MediaType.APPLICATION_JSON)
    public static class ObjectMapperProvider implements ContextResolver<ObjectMapper> {

        private static final ObjectMapper mapper = new ObjectMapper();

        public ObjectMapper getContext(final Class<?> objectType) {
            return mapper;
        }
    }

    @Override
    protected void configureClient(final ClientConfig config) {
        config.register(ObjectMapperProvider.class);
    }

    @Test
    public void test() {
        final Set<Person> persons = Collections.singleton(Person.of("Tracy", "Jordan"));
        final Response response = target("persons/inputstream").request().post(Entity.json(persons.iterator()));
        assertThat(response.getStatus()).isEqualTo(204);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文档流发送到 Jersey @POST 端点 的相关文章

随机推荐

  • 来自存储在表中的值的 SQL 动态 SELECT 语句

    我已经研究了几天了 感觉自己在兜圈子 我有 SQL 的基本知识 但有很多地方我不明白 我有一个表 用于存储数据库中所有其他表的名称和字段 tblFields TableName FieldName BookmarkName Customer
  • 为什么除了没有捕获这个错误?

    我有一个程序可以模拟掷骰子并将它们与图表 一组字符串列表 中的值进行比较 我目前从 TEdit 获取值 如果该框为空 则会引发 EConvertError 该错误应该由我的 Try Except 语句捕获 但事实并非如此 想法和建议 下面的
  • 如何保护项目中的数据库配置文件? [复制]

    这个问题在这里已经有答案了 我已经创建了 php 文件来与数据库服务器建立连接 在这个文件中 我正在使用mysql connect 函数的参数为 我的数据库服务器的主机 用户名和密码 public class DatabaseConnect
  • 在网页上实时显示数据[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我不确定如何用最好的方式来表达它 但我正在寻找一种在网页可用时在网页上显示数据的方法 示例 在网页上显示 IRC 频道消息 当消息发送到 IRC 频
  • 生成正则表达式

    通常在我们的工作中我们会使用正则表达式capture or match运营 但是 可以使用正则表达式 至少手动 来生成与正则表达式匹配的合法句子 当然 有些正则表达式可以匹配无限长的句子 例如表达式 我有一个问题可以通过使用正则表达式句子生
  • IntelliJ:命令行太长。在 SBT 项目中缩短命令行...

    当我尝试运行我的应用程序时 IntelliJ 刚刚开始告诉我 命令行太长 缩短 my app 或应用程序默认配置的命令行 the my app是一个蓝色链接 可通往 编辑配置 窗口 自动选择并突出显示类路径缩短器的下拉列表 我选择了建议的选
  • Android:ListViews 和 CheckBoxes 的问题

    我有一个 ListView 在每个列表项中我有一些 TextView 和一个 CheckBox 当我检查复选框并且 onCheckedChangeListener 触发时 一切都会按预期工作 然而 一旦选中一个复选框 就会随机选中其他复选框
  • .Maui 静态 Web 资源构建问题

    严重性代码 说明 项目文件行抑制状态 未找到 obj Debug net6 0 android android x86 staticwebassets build json 处的错误清单文件 MauiApp3 C Program Files
  • 如何更改 seaborn 对图中绘图元素的 z 顺序

    这是一个片段 用于重现我的示例图像 import pandas as pd import numpy as np import seaborn as sns np random seed 42 df pd DataFrame np rand
  • Environment.UserName 返回应用程序池名称而不是用户名

    下面一行 Environment UserName 在 Visual Studio 的调试模式下 返回我需要的用户身份 然后 当我在 IIS 中设置站点并运行代码时 同一行返回该站点使用的应用程序池的名称 我怎样才能让它仍然返回用户名 尝试
  • 如何在 Spring Webflux / Reactor Netty Web 应用程序中执行阻塞调用

    在我的用例中 我有一个带有 Reactor Netty 的 Spring Webflux 微服务 我有以下依赖项 org springframework boot spring boot starter webflux 2 0 1 发布 o
  • CSS 样式 <音频>

    有没有一种方法可以设置时间线拇指 搜索者 的样式
  • 将代码跟踪到 PDF 或 PostScript 文件中

    有没有办法跟踪 PDF 的打开时间 也许通过将一些脚本嵌入到 pdf 本身中 我看到下面的问题 我想对于 javascript 来说答案是 否 但我想知道这是否可能 Google Analytics 跟踪代码插入 pdf 文件 PDF 标准
  • 计算“凯文·培根”数字

    我一直在玩弄一些东西并想到了试图弄清楚的想法凯文 培根数字 我有一个网站的数据 为此我们可以考虑将其视为社交网络 让我们假设它是 Facebook 为了简化讨论 我有一些人 我有他们的朋友名单 所以我有他们之间的联系 我如何计算一个人到另一
  • 使用 JavaScript 捕获文件浏览窗口的关闭

    我正在使用 infile 要求用户浏览其计算机上的文件 如果在没有选择文件的情况下关闭窗口 有没有办法捕获 例如 如果单击 x
  • 有没有办法在 Git 中不提交或存储的情况下保存当前更改?

    我更改了很多文件 我意识到我的方法不好 所以 我想尝试另一种方法 在这种情况下我知道两种解决方案 提交 我不想使用此功能 因为我知道我当前的代码不起作用 Stash 我也不想使用这个 因为我错过了几个文件 我必须重新编写它们 我正在寻找的是
  • 让 Excel 从 VBA 中刷新工作表上的数据

    如何在 Excel 中获取电子表格数据并在 VBA 中重新计算自身 而无需仅仅更改单元格值 下面几行就可以解决这个问题 ActiveSheet EnableCalculation False ActiveSheet EnableCalcul
  • 如何按国家和关键字查找视频?

    我想按国家 地区和关键字查找 Youtube 视频 例如 在挪威上传的所有有关奥巴马的视频 我已经尝试过的事情 1 标准供稿允许特定于国家 地区的结果 但不允许关键字搜索 例子 http gdata youtube com feeds ap
  • 如何使用张量流构建多输入图?

    是否可以定义具有多个输入的 TensorFlow 图 例如 我想给图表两个图像和一个文本 每个图像都由一堆层处理 最后有一个 fc 层 然后有一个节点计算考虑这三种表示的损失函数 目的是让三个网络在考虑联合表示损失的情况下进行反向传播 是否
  • 将文档流发送到 Jersey @POST 端点

    我希望能够sendWeb 服务的一堆文档流 这将节省 Http 请求 响应开销并专注于文档本身 在Python中你可以做这样的事情 r requests post https stream twitter com 1 statuses fi