org.springframework.web.reactive.result.method

Class AbstractHandlerMethodMapping<T>

    • Constructor Detail

      • AbstractHandlerMethodMapping

        public AbstractHandlerMethodMapping()
    • Method Detail

      • getHandlerMethods

        public java.util.Map<T,HandlerMethod> getHandlerMethods()
        Return a (read-only) map with all mappings and HandlerMethod's.
      • registerMapping

        public void registerMapping(T mapping,
                                    java.lang.Object handler,
                                    java.lang.reflect.Method method)
        Register the given mapping.

        This method may be invoked at runtime after initialization has completed.

        Parameters:
        mapping - the mapping for the handler method
        handler - the handler
        method - the method
      • unregisterMapping

        public void unregisterMapping(T mapping)
        Un-register the given mapping.

        This method may be invoked at runtime after initialization has completed.

        Parameters:
        mapping - the mapping to unregister
      • detectHandlerMethods

        protected void detectHandlerMethods(java.lang.Object handler)
        Look for handler methods in a handler.
        Parameters:
        handler - the bean name of a handler or a handler instance
      • registerHandlerMethod

        protected void registerHandlerMethod(java.lang.Object handler,
                                             java.lang.reflect.Method method,
                                             T mapping)
        Register a handler method and its unique mapping. Invoked at startup for each detected handler method.
        Parameters:
        handler - the bean name of the handler or the handler instance
        method - the method to register
        mapping - the mapping conditions associated with the handler method
        Throws:
        java.lang.IllegalStateException - if another method was already registered under the same mapping
      • createHandlerMethod

        protected HandlerMethod createHandlerMethod(java.lang.Object handler,
                                                    java.lang.reflect.Method method)
        Create the HandlerMethod instance.
        Parameters:
        handler - either a bean name or an actual handler instance
        method - the target method
        Returns:
        the created HandlerMethod
      • initCorsConfiguration

        @Nullable
        protected CorsConfiguration initCorsConfiguration(java.lang.Object handler,
                                                                    java.lang.reflect.Method method,
                                                                    T mapping)
        Extract and return the CORS configuration for the mapping.
      • handlerMethodsInitialized

        protected void handlerMethodsInitialized(java.util.Map<T,HandlerMethod> handlerMethods)
        Invoked after all handler methods have been detected.
        Parameters:
        handlerMethods - a read-only map with handler methods and mappings.
      • handleMatch

        protected void handleMatch(T mapping,
                                   HandlerMethod handlerMethod,
                                   ServerWebExchange exchange)
        Invoked when a matching mapping is found.
        Parameters:
        mapping - the matching mapping
        handlerMethod - the matching method
        exchange - the current exchange
      • handleNoMatch

        @Nullable
        protected HandlerMethod handleNoMatch(java.util.Set<T> mappings,
                                                        ServerWebExchange exchange)
                                                 throws java.lang.Exception
        Invoked when no matching mapping is not found.
        Parameters:
        mappings - all registered mappings
        exchange - the current exchange
        Returns:
        an alternative HandlerMethod or null
        Throws:
        java.lang.Exception - provides details that can be translated into an error status code
      • isHandler

        protected abstract boolean isHandler(java.lang.Class<?> beanType)
        Whether the given type is a handler with handler methods.
        Parameters:
        beanType - the type of the bean being checked
        Returns:
        "true" if this a handler type, "false" otherwise.
      • getMappingForMethod

        @Nullable
        protected abstract T getMappingForMethod(java.lang.reflect.Method method,
                                                           java.lang.Class<?> handlerType)
        Provide the mapping for a handler method. A method for which no mapping can be provided is not a handler method.
        Parameters:
        method - the method to provide a mapping for
        handlerType - the handler type, possibly a sub-type of the method's declaring class
        Returns:
        the mapping, or null if the method is not mapped
      • getMatchingMapping

        @Nullable
        protected abstract T getMatchingMapping(T mapping,
                                                          ServerWebExchange exchange)
        Check if a mapping matches the current request and return a (potentially new) mapping with conditions relevant to the current request.
        Parameters:
        mapping - the mapping to get a match for
        exchange - the current exchange
        Returns:
        the match, or null if the mapping doesn't match
      • getMappingComparator

        protected abstract java.util.Comparator<T> getMappingComparator(ServerWebExchange exchange)
        Return a comparator for sorting matching mappings. The returned comparator should sort 'better' matches higher.
        Parameters:
        exchange - the current exchange
        Returns:
        the comparator (never null)