Как установить идентификатор для входящего http-шлюза (в стиле DSL)?

В моем приложении Spring Boot у меня есть следующий входящий шлюз (Java DSL):

@Bean
    public IntegrationFlow upperCaseFlow() {
        return IntegrationFlows
                .from(
                        Http.inboundGateway("/conversions/upperCase")
                        .requestMapping(r -> r.methods(HttpMethod.POST).consumes("text/plain"))
                        .requestPayloadType(String.class)
                        .id("upperCaseGateway")
                )
                .<String>handle((p, h) -> p.toUpperCase())
                .get();
    }

Я полагаю, что .id(upperCaseGateway)- это та часть, где для шлюза устанавливается id.

С другой стороны, я пытаюсь реализовать другой входящий HTTP-шлюз в немного другом стиле DSL следующим образом:

@Bean
    public IntegrationFlow httpGetFlow() {
        return IntegrationFlows.from(httpGetGate()).channel("httpGetChannel").handle("personEndpoint", "get").get();
    }

@Bean
    public MessagingGatewaySupport httpGetGate() {
        HttpRequestHandlingMessagingGateway handler = new HttpRequestHandlingMessagingGateway();
        handler.setRequestMapping(createMapping(new HttpMethod[]{HttpMethod.GET}, "/persons/{personId}"));
        handler.setPayloadExpression(parser().parseExpression("#pathVariables.personId"));
        handler.setHeaderMapper(headerMapper());

        return handler;
    }

@Bean
    public HeaderMapper<HttpHeaders> headerMapper() {
        return new DefaultHttpHeaderMapper();
    }

Мой вопрос: во втором стиле создания входящего шлюза http, как мне установить идентификатор для шлюза со значением как "getPersonsGateway"? Я вижу, что в первом стиле это возможно с помощью простого вызова.id("upperCaseGateway").

Любое руководство будет с благодарностью!

С уважением, Бхарат

1 ответ

Решение

id это просто имя бобов; для составных компонентов (потребителей) это имя компонента конечной точки потребителя, и обработчик сообщений получает <id>.handler,

Для простых компонентов привода сообщений, таких как входящий адаптер http, это просто имя компонента. Поэтому назовите свой боб соответствующим образом.

Или

@Bean("upperCaseGateway")
public MessagingGatewaySupport httpGetGate() {

или просто

@Bean
public MessagingGatewaySupport upperCaseGateway() {
Другие вопросы по тегам