是否有适用于 Java 的事件驱动 JSON REST 客户端 API?
我有一个Java应用程序,它使用Spring的RestTemplate API来编写JSON REST服务的简洁,可读的消费者:
基本上:
RestTemplate rest = new RestTemplate(clientHttpRequestFactory);
ResponseEntity<ItemList> response = rest.exchange(url,
HttpMethod.GET,
requestEntity,
ItemList.class);
for(Item item : response.getBody().getItems()) {
handler.onItem(item);
}
JSON 响应包含一个项目列表,如您所见,我在自己的代码中有一个事件驱动的设计,用于依次处理每个项目。但是,整个列表作为 的一部分在内存中,该生成。response
RestTemplate.exchange()
我希望应用程序能够处理包含大量项目的响应 - 例如50,000,在这种情况下,实现存在两个问题:
- 在传输整个 HTTP 响应之前,不会处理单个项目 - 增加了不必要的延迟。
- 巨大的响应对象位于内存中,在处理完最后一项之前无法进行 GC 处理。
有没有一个相当成熟的Java JSON/REST客户端API以事件驱动的方式使用响应?
我想它会让你做这样的事情:
RestStreamer rest = new RestStreamer(clientHttpRequestFactory);
// Tell the RestStreamer "when, while parsing a response, you encounter a JSON
// element matching JSONPath "$.items[*]" pass it to "handler" for processing.
rest.onJsonPath("$.items[*]").handle(handler);
// Tell the RestStreamer to make an HTTP request, parse it as a stream.
// We expect "handler" to get passed an object each time the parser encounters
// an item.
rest.execute(url, HttpMethod.GET, requestEntity);
我很感激我可以使用Jackson,GSON等的流式JSON API来滚动我自己实现这种行为 - 但我很想被告知,有一些东西可以通过简洁,富有表现力的API可靠地做到这一点,并与HTTP方面集成。