public abstract class AbstractUrlHandlerMapping extends AbstractHandlerMapping
HandlerMapping
implementations.
Supports direct matches, e.g. a registered "/test" matches "/test", and
various path pattern matches, e.g. a registered "/t*" pattern matches
both "/test" and "/team", "/test/*" matches all paths under "/test",
"/test/**" matches all paths below "/test". For details, see the
PathPattern
javadoc.
Will search all path patterns to find the most specific match for the current request path. The most specific pattern is defined as the longest path pattern with the fewest captured variables and wildcards.
logger
BEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
AbstractUrlHandlerMapping() |
Modifier and Type | Method and Description |
---|---|
reactor.core.publisher.Mono<java.lang.Object> |
getHandlerInternal(ServerWebExchange exchange)
Look up a handler for the given request, returning an empty
Mono
if no specific one is found. |
java.util.Map<PathPattern,java.lang.Object> |
getHandlerMap()
Return a read-only view of registered path patterns and handlers which may
may be an actual handler instance or the bean name of lazily initialized
handler.
|
protected java.lang.Object |
lookupHandler(PathContainer lookupPath,
ServerWebExchange exchange)
Look up a handler instance for the given URL lookup path.
|
protected void |
registerHandler(java.lang.String[] urlPaths,
java.lang.String beanName)
Register the specified handler for the given URL paths.
|
protected void |
registerHandler(java.lang.String urlPath,
java.lang.Object handler)
Register the specified handler for the given URL path.
|
void |
setLazyInitHandlers(boolean lazyInitHandlers)
Set whether to lazily initialize handlers.
|
protected void |
validateHandler(java.lang.Object handler,
ServerWebExchange exchange)
Validate the given handler against the current request.
|
getCorsConfiguration, getCorsProcessor, getHandler, getOrder, getPathPatternParser, setCorsConfigurations, setCorsProcessor, setOrder, setUseCaseSensitiveMatch, setUseTrailingSlashMatch
getApplicationContext, getMessageSourceAccessor, initApplicationContext, initApplicationContext, isContextRequired, obtainApplicationContext, requiredContextClass, setApplicationContext
public void setLazyInitHandlers(boolean lazyInitHandlers)
If you want to allow your controllers to be lazily initialized, make them "lazy-init" and set this flag to true. Just making them "lazy-init" will not work, as they are initialized through the references from the handler mapping in this case.
public final java.util.Map<PathPattern,java.lang.Object> getHandlerMap()
public reactor.core.publisher.Mono<java.lang.Object> getHandlerInternal(ServerWebExchange exchange)
AbstractHandlerMapping
Mono
if no specific one is found. This method is called by AbstractHandlerMapping.getHandler(org.springframework.web.server.ServerWebExchange)
.
On CORS pre-flight requests this method should return a match not for
the pre-flight request but for the expected actual request based on the URL
path, the HTTP methods from the "Access-Control-Request-Method" header, and
the headers from the "Access-Control-Request-Headers" header thus allowing
the CORS configuration to be obtained via #getCorsConfigurations
,
getHandlerInternal
in class AbstractHandlerMapping
exchange
- current exchangeMono
for the matching handler, if any@Nullable protected java.lang.Object lookupHandler(PathContainer lookupPath, ServerWebExchange exchange) throws java.lang.Exception
Supports direct matches, e.g. a registered "/test" matches "/test", and various path pattern matches, e.g. a registered "/t*" matches both "/test" and "/team". For details, see the PathPattern class.
lookupPath
- URL the handler is mapped toexchange
- the current exchangenull
if not foundjava.lang.Exception
PathPattern
protected void validateHandler(java.lang.Object handler, ServerWebExchange exchange)
The default implementation is empty. Can be overridden in subclasses, for example to enforce specific preconditions expressed in URL mappings.
handler
- the handler object to validateexchange
- current exchangeprotected void registerHandler(java.lang.String[] urlPaths, java.lang.String beanName) throws BeansException, java.lang.IllegalStateException
urlPaths
- the URLs that the bean should be mapped tobeanName
- the name of the handler beanBeansException
- if the handler couldn't be registeredjava.lang.IllegalStateException
- if there is a conflicting handler registeredprotected void registerHandler(java.lang.String urlPath, java.lang.Object handler) throws BeansException, java.lang.IllegalStateException
urlPath
- the URL the bean should be mapped tohandler
- the handler instance or handler bean name String
(a bean name will automatically be resolved into the corresponding handler bean)BeansException
- if the handler couldn't be registeredjava.lang.IllegalStateException
- if there is a conflicting handler registered