Class IntegrationRequestMappingHandlerMapping
- All Implemented Interfaces:
EventListener,Aware,BeanNameAware,InitializingBean,ApplicationContextAware,ApplicationListener<ContextRefreshedEvent>,EmbeddedValueResolverAware,Ordered,ServletContextAware,MatchableHandlerMapping,HandlerMapping
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.
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.
- Since:
- 3.0
- Author:
- Artem Bilan, Gary Russell
- See Also:
-
Field Summary
Fields inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping
mappingsLoggerFields inherited from class org.springframework.context.support.ApplicationObjectSupport
loggerFields inherited from interface org.springframework.web.servlet.HandlerMapping
API_VERSION_ATTRIBUTE, BEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, LOOKUP_PATH, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTEFields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected voiddetectHandlerMethods(Object handlerArg) protected @Nullable CorsConfigurationgetCorsConfiguration(Object handler, HttpServletRequest request) protected HandlerExecutionChaingetHandlerExecutionChain(Object handlerArg, HttpServletRequest request) protected @Nullable CorsConfigurationinitCorsConfiguration(Object handler, Method method, RequestMappingInfo mappingInfo) protected booleanvoidHttpRequestHandlingEndpointSupports may depend on auto-createdrequestChannels, so MVC Handlers detection should be postponed as late as possible.Methods inherited from class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
createRequestMappingInfo, createRequestMappingInfo, getBuilderConfiguration, getContentNegotiationManager, getCustomMethodCondition, getCustomTypeCondition, getMappingForMethod, getPathPrefixes, match, registerHandlerMethod, registerMapping, resolveEmbeddedValuesInPatterns, setContentNegotiationManager, setEmbeddedValueResolver, setPathPrefixesMethods inherited from class org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping
getDirectPaths, getHandlerInternal, getMappingComparator, getMatchingMapping, handleMatch, handleNoMatchMethods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMethodMapping
createHandlerMethod, getCandidateBeanNames, getHandlerMethods, getHandlerMethodsForMappingName, getNamingStrategy, handlerMethodsInitialized, hasCorsConfigurationSource, initHandlerMethods, lookupHandlerMethod, processCandidateBean, setDetectHandlerMethodsInAncestorContexts, setHandlerMethodMappingNamingStrategy, setPatternParser, unregisterMappingMethods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping
adaptInterceptor, detectMappedInterceptors, extendInterceptors, formatMappingName, getAdaptedInterceptors, getApiVersionStrategy, getCorsConfigurationSource, getCorsHandlerExecutionChain, getCorsProcessor, getDefaultHandler, getHandler, getMappedInterceptors, getOrder, getPathMatcher, getPatternParser, getUrlPathHelper, initApplicationContext, initInterceptors, initLookupPath, setAlwaysUseFullPath, setApiVersionStrategy, setBeanName, setCorsConfigurations, setCorsConfigurationSource, setCorsProcessor, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelper, usesPathPatternsMethods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextMethods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, obtainApplicationContext, requiredContextClass, setApplicationContextMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.context.ApplicationListener
supportsAsyncExecutionMethods inherited from interface org.springframework.web.servlet.HandlerMapping
getHandler, usesPathPatternsMethods inherited from interface org.springframework.web.servlet.handler.MatchableHandlerMapping
getPatternParser
-
Constructor Details
-
IntegrationRequestMappingHandlerMapping
public IntegrationRequestMappingHandlerMapping()
-
-
Method Details
-
isHandler
- Overrides:
isHandlerin classRequestMappingHandlerMapping
-
getHandlerExecutionChain
protected HandlerExecutionChain getHandlerExecutionChain(Object handlerArg, HttpServletRequest request) - Overrides:
getHandlerExecutionChainin classAbstractHandlerMapping
-
getCorsConfiguration
protected @Nullable CorsConfiguration getCorsConfiguration(Object handler, HttpServletRequest request) - Overrides:
getCorsConfigurationin classAbstractHandlerMethodMapping<RequestMappingInfo>
-
detectHandlerMethods
- Overrides:
detectHandlerMethodsin classAbstractHandlerMethodMapping<RequestMappingInfo>
-
initCorsConfiguration
protected @Nullable CorsConfiguration initCorsConfiguration(Object handler, Method method, RequestMappingInfo mappingInfo) - Overrides:
initCorsConfigurationin classRequestMappingHandlerMapping
-
onApplicationEvent
HttpRequestHandlingEndpointSupports may depend on auto-createdrequestChannels, so MVC Handlers detection should be postponed as late as possible.- Specified by:
onApplicationEventin interfaceApplicationListener<ContextRefreshedEvent>- See Also:
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceInitializingBean- Overrides:
afterPropertiesSetin classRequestMappingHandlerMapping
-