Class IntegrationRequestMappingHandlerMapping

All Implemented Interfaces:
EventListener, Aware, BeanNameAware, BeanPostProcessor, DestructionAwareBeanPostProcessor, InitializingBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEvent>, EmbeddedValueResolverAware, Ordered, ServletContextAware, MatchableHandlerMapping, HandlerMapping

public final class IntegrationRequestMappingHandlerMapping extends RequestMappingHandlerMapping implements ApplicationListener<ContextRefreshedEvent>, DestructionAwareBeanPostProcessor
The HandlerMapping implementation that detects and registers RequestMappingInfos for HttpRequestHandlingEndpointSupport from a Spring Integration HTTP configuration of <inbound-channel-adapter/> and <inbound-gateway/> elements.

This class is automatically configured as a bean in the application context during the parsing phase of the <inbound-channel-adapter/> and <inbound-gateway/> elements, if there is none registered, yet. However it can be configured as a regular bean with appropriate configuration for RequestMappingHandlerMapping. It is recommended to have only one similar bean in the application context using the 'id' HttpContextUtils.HANDLER_MAPPING_BEAN_NAME.

In most cases, Spring MVC offers to configure Request Mapping via org.springframework.stereotype.Controller and RequestMapping. That's why Spring MVC's Handler Mapping infrastructure relies on HandlerMethod, as different methods at the same org.springframework.stereotype.Controller user-class may have their own RequestMapping. On the other side, all Spring Integration HTTP Inbound Endpoints are configured on the basis of the same BaseHttpInboundEndpoint class and there is no single RequestMappingInfo configuration without HandlerMethod in Spring MVC. Accordingly IntegrationRequestMappingHandlerMapping is a HandlerMapping compromise implementation between method-level annotations and component-level (e.g. Spring Integration XML) configurations.

Starting with version 5.1, this class implements DestructionAwareBeanPostProcessor to register HTTP endpoints at runtime for dynamically declared beans, e.g. via IntegrationFlowContext, and unregister them during the BaseHttpInboundEndpoint destruction.

This class extends the Spring MVC RequestMappingHandlerMapping class, inheriting most of its logic, especially RequestMappingInfoHandlerMapping.handleNoMatch(java.util.Set, String, HttpServletRequest), which throws a specific 4xx error for the HTTP response, when mapping doesn't match for some reason, preventing calls to any remaining mapping handlers in the application context. For this reason, configuring the same path for both Spring Integration and Spring MVC request mappings (e.g. `POST` in one and `GET` in the other) is not supported; the MVC mapping will not be found.

Artem Bilan, Gary Russell
See Also: