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

如何在内部动态调用重载方法。在spring集成中具有两个参数的handle()?

邹杰
2023-03-14

我想让我的spring集成流通用于通过网关发送的不同类型的请求,我想拥有重载方法,并想为通过网关发送的特定消息调用特定的重载方法。

flow.handle(validatorService, "validateRequest")

类似于上面的代码,在validatorService中,我有几个重载方法来满足这个流中的不同请求。但是,如果在有效载荷的同时,我想向一个方法发送另一个参数,该怎么办。那我该怎么做呢。

@Configuration
        public class IntegrationConfiguration {
          @Autowired LionsServiceImpl lionsService;
        
          long dbId = new SequenceGenerator().nextId();
      //   Main flow
      @Bean
  public IntegrationFlow flow() {
    return flow ->
        flow.handle(validatorService, "validateRequest")
            .split()
            .channel(c -> c.executor(Executors.newCachedThreadPool()))
            .scatterGather(
                scatterer ->
                    scatterer
                        .applySequence(true)
                        .recipientFlow(flow1())
                        .recipientFlow(flow2())
                        .recipientFlow(flow3()),
                gatherer ->
                    gatherer
                        .releaseLockBeforeSend(true)
                        .releaseStrategy(group -> group.size() == 2))
            .aggregate(prepareSomeRequest())
            .to(getDec());
  }

//网关

 @Gateway(requestChannel = "flow.input")
  void processLionRequest(
      @Payload Message lionRequest, @Header("sourceSystem") SourceSystem sourceSystem);

因此,如果你在<代码>流中看到。handle(validatorService,“validateRequest”)我们有一个validatorService类,它接受LionRequest、CatRequest并动态调用重载方法。同样,我重载了方法,它接受2个参数,一个是LionRequest或CatRequest,另一个是来自头或某个变量的值。

我的重载方法如下所示-

public LionRequest save(LionRequest lionreq, String dbID){}

public CatRequest save(CatRequest catReq, String dbID){}..

这样到网关,我可以传递LionRequest或CatRequest,我只需要从一个类调用保存方法,并且应该动态调用LionRequest/CatRequest重载方法。

请建议。一个示例代码会有所帮助

共有1个答案

暨宸
2023-03-14

我们需要理解“另一个论点”是什么,但如果你只谈论一条消息,那么可能是这样的:

Foo validateRequest(Foo payload, @Header("fooHeader") String fooHeader)

Bar validateRequest(Bar payload, @Header("barHeader") String barHeader)

查看文档中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/configuration.html#annotations

流定义中句柄()的引用与问题中的引用完全相同。

 类似资料:
  • 目前在我们的项目中,我们正在使用spring框架。由于一些项目需求,我们计划在我们的项目中实现Spring集成框架。 我打算抛出Spring集成示例(Spring集成Rest HTTP路径使用演示)应用程序 下面是应用程序Context-http-int.xml文件 根据我的理解,流程就像当输入通道中有消息时,员工搜索服务将被激活。但是根据我们的项目要求,我们需要在运行时根据一些头值激活服务,比如

  • 虽然知道使用反射不是一种好的测试方法,但我正在尝试测试我的代码。我有一个外部类作为public,有一个私有的内部类和一个公共方法,如下所示, 我的主要java类如下所示 这是投掷 线程“main”java中出现异常。lang.NoSuchMethodException:汽车。外部$内部。java上的test()。lang.Class。car上的getDeclaredMethod(Class.jav

  • 我正在尝试为创建网球锦标赛的应用程序填充队列 当我单击按钮“Crear Torneo”(如图所示)时,我正在方法“crearTorneo”中创建队列。当我点击“Añadir”按钮(也可以在图像中看到)时,它会获取几个TextFields中的信息并在“llenarCola”方法中创建一个对象,返回该对象的目的是填充队列。 现在,这是我的llenarCola方法: 这是我的crearTorneo方法:

  • 问题内容: 我想验证以下行为的方法如下。 在我的@Test类中,我希望做这样的事情来验证是否使用“ exception.message”和再次使用“ exception.detail”进行了调用 但是Mockito抱怨​​如下 我如何告诉Mockito检查两个值? 问题答案: 进一步的阅读使我尝试使用ArgumentCaptors和以下作品,尽管比我想要的更为冗长。

  • 我试图实现的是重写此方法: 公共布尔onKeyPreIme(int-keyCode,KeyEvent事件) 该方法位于SearchView中。搜索自动完成类http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.0_r1/android/support/v7/widget/Se

  • 我有一个CustomRequest类: } 然后我有我的类JSONRequest: } 我想做的是在我的postRequest方法中,有一个CustomRequest类的对象叫做JSONObject Request,我想将JSONObject响应变量从onResponse方法返回给父postRequest方法,我在以下位置得到一个错误: 因为它告诉我方法的返回类型是void,请告诉我我做错了什么,