Spring 集成 Java DSL:如何使用 Http.outboundGateway 方法动态选择 HttpMethod

Spring integration Java DSL: How to choose the HttpMethod dynamically with the Http.outboundGateway method

POSTPUTPATCHDELETE我有不同的流程方法,像这样

    private IntegrationFlow myChannelPost() {
      return f -> f
            .handle(Http.outboundGateway("url")
                    .uriVariable("url", m -> m.getHeaders().get("url"))
                    .httpMethod(HttpMethod.POST).mappedRequestHeaders("*")
                    .headerMapper(myHeaderMapper()).expectedResponseType(String.class))
           .route("nextChannel.input");
    }

    private IntegrationFlow myChannelPut() {
       return f -> f
            .handle(Http.outboundGateway("url")
                    .uriVariable("url", m -> m.getHeaders().get("url"))
                    .httpMethod(HttpMethod.PUT).mappedRequestHeaders("*")
                    .headerMapper(myHeaderMapper()).expectedResponseType(String.class))
           .route("nextChannel.input");
    }

    private IntegrationFlow myChannelPatch() {
      return f -> f
            .handle(Http.outboundGateway("url")
                    .uriVariable("url", m -> m.getHeaders().get("url"))
                    .httpMethod(HttpMethod.PATCH).mappedRequestHeaders("*")
                    .headerMapper(myHeaderMapper()).expectedResponseType(String.class))
           .route("nextChannel.input");
    }

    private IntegrationFlow myChannelDelete() {
      return f -> f
            .handle(Http.outboundGateway("url")
                    .uriVariable("url", m -> m.getHeaders().get("url"))
                    .httpMethod(HttpMethod.DELETE).mappedRequestHeaders("*")
                    .headerMapper(myHeaderMapper()).expectedResponseType(String.class))
           .route("nextChannel.input");
    }

它们四次包含几乎相同的代码。是否可以使用一种方法动态处理这四种情况?

将方法添加到 header 和...

.httpMethodFunction(m -> m.getHeaders().get("httpMethod")

(或使用 .httpMethodExpression(expression) 从某些 SpEL 表达式派生)。