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

如何聚合来自多个服务的JAX-RS响应

羊煜
2023-03-14

我们有一个登录后显示的用户仪表板。仪表板由多个小部件组成。每个小部件从单独的restful服务中提取内容。例如:新闻/邮件/问题/警报。每个小部件在加载到页面上后调用服务。这样就有多个webservice调用。

有没有办法减少多次通话。

它的工作方式是当第一次加载页面时,服务应该在单个调用中返回所有小部件的聚合数据。

每个服务也应该独立可用,以便可以用于刷新单个小部件和其他系统集成。

注意:小部件是指任何可以使用restful服务中json数据的javascript portlet。所有服务都在单个web应用程序中。

我们如何聚合来自多个服务的响应并组合成一个JSON?

共有2个答案

蒋高杰
2023-03-14

记住,json服务只是方法,所以要详细说明@Vengard的答案(请接受前面的答案),您可以创建一个聚合方法,该方法如下所示:

@Path ("15218462")
class Test {
  @Path ("aggregate")
  public Map<String, Object> aggregate(@QueryParam("service") List<String> services) {
    Map<String, Object> result = new HashMap<>();       
      for (String serviceName : services) {
        if(serviceName.equals("mails") {
          result.put("mails", mails());
        }
        // ... etc 
      }
  }
  @Path
  public List<String> mails() {
    // .... processing code ...
  }
}

如果这些服务不在您的控制之下,并且您不介意依赖第三方,那么您可能希望查看类似Yahoo pipes的内容(http://pipes.yahoo.com/pipes/)

葛玉堂
2023-03-14

如果您可以添加自己的JAX-RS服务,只需添加一个新的服务,调用其他每个服务并创建聚合响应。

例如:

GET http://myservice.com/rest/aggregate?service=news&service=mails&service=questions

服务的url前缀可以作为单独的编码参数提供,也可以在聚合服务中提供。

如果所有这些都在同一台服务器中运行,只需使用其他服务的现有API来创建聚合响应即可。

 类似资料:
  • 我对使用jersey jetty glassfish之类的web服务器/应用程序/servlet感到困惑。还有web.xml文件?什么?ResourceConfig只接受类,而不接受它们的实例。一切似乎都是那么的一团糟。 我怎么能就这样做类似的事情呢?

  • 我最近开始使用WebFlux,需要关于如何链接多个服务和聚合响应的建议。这4个服务及其响应POJO类似于以下示例: 以及4项服务的签名: 因此,需要为Flux中的每个响应1调用service2,为每个响应2调用service3。模型之间的关系是: 聚合的最终响应应类似于(JSON): 所以首先我需要调用Service1,然后为每个响应调用service2,然后为每个响应调用service3(由se

  • 问题内容: 我正在尝试向一些Web服务调用中添加一些响应标头。我使用CXF 2.1.2和JAX- RS编写了Web服务。我需要返回一个对象,我还想向Response添加一些标头。 在不返回javax.ws.rs.core.Response对象的情况下 ,如何在响应中添加标头并仍然返回javabean? 问题答案: 您可以通过Web服务中的@Context注释注入对实际HttpServletResp

  • 问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛

  • 我用以下注释注册了rest资源: 当我尝试启动服务器时,我得到以下错误: classCastException:无法将org.glassfish.jersey.ext.cdi1x.transaction.internal.transactionalExceptionInterceptorProvider转换为org.glassfish.jersey.server.spi.componentProv

  • 你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W