Class MessageMappingMessageHandler
- java.lang.Object
- org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler<CompositeMessageCondition>
- org.springframework.messaging.handler.annotation.reactive.MessageMappingMessageHandler
- All Implemented Interfaces:
Aware,BeanNameAware,InitializingBean,ApplicationContextAware,EmbeddedValueResolverAware,ReactiveMessageHandler
- Direct Known Subclasses:
RSocketMessageHandler
public class MessageMappingMessageHandler extends AbstractMethodMessageHandler<CompositeMessageCondition> implements EmbeddedValueResolverAware
Extension ofAbstractMethodMessageHandlerfor reactive, non-blocking handling of messages via@MessageMappingmethods. By default such methods are detected in@ControllerSpring beans but that can be changed viaAbstractMethodMessageHandler.setHandlerPredicate(Predicate).Payloads for incoming messages are decoded through the configured
setDecoders(List)decoders, with the help ofPayloadMethodArgumentResolver.There is no default handling for return values but
AbstractMethodMessageHandler.setReturnValueHandlerConfigurer(org.springframework.messaging.handler.invocation.reactive.ReturnValueHandlerConfigurer)can be used to configure custom return value handlers. Sub-classes may also overrideinitReturnValueHandlers()to set up default return value handlers.- Since:
- 5.2
- Author:
- Rossen Stoyanchev
- See Also:
AbstractEncoderMethodReturnValueHandler
Field Summary
Fields inherited from class org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler
logger
Constructor Summary
Constructors Constructor Description MessageMappingMessageHandler()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()Invoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.protected AbstractExceptionHandlerMethodResolvercreateExceptionMethodResolverFor(Class<?> beanType)Create a concrete instance ofAbstractExceptionHandlerMethodResolverthat finds exception handling methods based on some criteria, e.g.protected CompositeMessageConditiongetCondition(AnnotatedElement element)Determine the mapping condition for the given annotated element.ConversionServicegetConversionService()Return the configured ConversionService.List<? extends Decoder<?>>getDecoders()Return the configured decoders.protected RouteMatcher.RoutegetDestination(Message<?> message)Extract the destination from the given message.protected Set<String>getDirectLookupMappings(CompositeMessageCondition mapping)Return String-based destinations for the given mapping, if any, that can be used to find matches with a direct lookup (i.e.protected Comparator<CompositeMessageCondition>getMappingComparator(Message<?> message)Return a comparator for sorting matching mappings.protected CompositeMessageConditiongetMappingForMethod(Method method, Class<?> handlerType)Obtain the mapping for the given method, if any.protected CompositeMessageConditiongetMatchingMapping(CompositeMessageCondition mapping, Message<?> message)Check if a mapping matches the current message and return a possibly new mapping with conditions relevant to the current request.RouteMatchergetRouteMatcher()Return theRouteMatcherused to map messages to handlers.ValidatorgetValidator()Return the configured Validator instance.protected reactor.core.publisher.Mono<Void>handleMatch(CompositeMessageCondition mapping, HandlerMethod handlerMethod, Message<?> message)protected List<? extends HandlerMethodArgumentResolver>initArgumentResolvers()Return the list of argument resolvers to use.protected List<? extends HandlerMethodReturnValueHandler>initReturnValueHandlers()Return the list of return value handlers to use.protected RouteMatcherobtainRouteMatcher()Obtain theRouteMatcherfor actual use.protected String[]processDestinations(String[] destinations)Resolve placeholders in the given destinations.voidsetConversionService(ConversionService conversionService)Configure aConversionServiceto use for type conversion of String based values, e.g.voidsetDecoders(List<? extends Decoder<?>> decoders)Configure the decoders to use for incoming payloads.voidsetEmbeddedValueResolver(StringValueResolver resolver)Set the StringValueResolver to use for resolving embedded definition values.voidsetRouteMatcher(RouteMatcher routeMatcher)Set theRouteMatcherto use for mapping messages to handlers based on the route patterns they're configured with.voidsetValidator(Validator validator)Set the Validator instance used for validating@Payloadarguments.Methods inherited from class org.springframework.messaging.handler.invocation.reactive.AbstractMethodMessageHandler
detectHandlerMethods, extendMapping, getApplicationContext, getArgumentResolverConfigurer, getArgumentResolvers, getBeanName, getDestinationLookup, getHandlerMethods, getHandlerPredicate, getReactiveAdapterRegistry, getReturnValueHandlerConfigurer, handleMessage, handleNoMatch, registerExceptionHandlerAdvice, registerHandlerMethod, setApplicationContext, setArgumentResolverConfigurer, setBeanName, setHandlerPredicate, setHandlers, setReactiveAdapterRegistry, setReturnValueHandlerConfigurer
Constructor Detail
MessageMappingMessageHandler
public MessageMappingMessageHandler()
Method Detail
setDecoders
public void setDecoders(List<? extends Decoder<?>> decoders)
Configure the decoders to use for incoming payloads.
getDecoders
public List<? extends Decoder<?>> getDecoders()
Return the configured decoders.
setValidator
public void setValidator(@Nullable Validator validator)
Set the Validator instance used for validating@Payloadarguments.- See Also:
Validated,PayloadMethodArgumentResolver
getValidator
@Nullable public Validator getValidator()
Return the configured Validator instance.
setRouteMatcher
public void setRouteMatcher(@Nullable RouteMatcher routeMatcher)
Set theRouteMatcherto use for mapping messages to handlers based on the route patterns they're configured with.By default,
SimpleRouteMatcheris used, backed byAntPathMatcherwith "." as separator. For greater efficiency consider using thePathPatternRouteMatcherfromspring-webinstead.
getRouteMatcher
@Nullable public RouteMatcher getRouteMatcher()
Return theRouteMatcherused to map messages to handlers. May benullbefore the component is initialized.
obtainRouteMatcher
protected RouteMatcher obtainRouteMatcher()
Obtain theRouteMatcherfor actual use.- Returns:
- the RouteMatcher (never
null) - Throws:
IllegalStateException- in case of no RouteMatcher set- Since:
- 5.0
setConversionService
public void setConversionService(ConversionService conversionService)
Configure aConversionServiceto use for type conversion of String based values, e.g. in destination variables or headers.By default
DefaultFormattingConversionServiceis used.- Parameters:
conversionService- the conversion service to use
getConversionService
public ConversionService getConversionService()
Return the configured ConversionService.
setEmbeddedValueResolver
public void setEmbeddedValueResolver(StringValueResolver resolver)
Description copied from interface:EmbeddedValueResolverAwareSet the StringValueResolver to use for resolving embedded definition values.- Specified by:
setEmbeddedValueResolverin interfaceEmbeddedValueResolverAware
afterPropertiesSet
public void afterPropertiesSet()
Description copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSetin interfaceInitializingBean- Overrides:
afterPropertiesSetin classAbstractMethodMessageHandler<CompositeMessageCondition>
initArgumentResolvers
protected List<? extends HandlerMethodArgumentResolver> initArgumentResolvers()
Description copied from class:AbstractMethodMessageHandlerReturn the list of argument resolvers to use.Subclasses should also take into account custom argument types configured via
AbstractMethodMessageHandler.setArgumentResolverConfigurer(org.springframework.messaging.handler.invocation.reactive.ArgumentResolverConfigurer).- Specified by:
initArgumentResolversin classAbstractMethodMessageHandler<CompositeMessageCondition>
initReturnValueHandlers
protected List<? extends HandlerMethodReturnValueHandler> initReturnValueHandlers()
Description copied from class:AbstractMethodMessageHandlerReturn the list of return value handlers to use.Subclasses should also take into account custom return value types configured via
AbstractMethodMessageHandler.setReturnValueHandlerConfigurer(org.springframework.messaging.handler.invocation.reactive.ReturnValueHandlerConfigurer).- Specified by:
initReturnValueHandlersin classAbstractMethodMessageHandler<CompositeMessageCondition>
getMappingForMethod
protected CompositeMessageCondition getMappingForMethod(Method method, Class<?> handlerType)
Description copied from class:AbstractMethodMessageHandlerObtain the mapping for the given method, if any.- Specified by:
getMappingForMethodin classAbstractMethodMessageHandler<CompositeMessageCondition>- Parameters:
method- the method to checkhandlerType- the handler type, possibly a sub-type of the method's declaring class- Returns:
- the mapping, or
nullif the method is not mapped
getCondition
@Nullable protected CompositeMessageCondition getCondition(AnnotatedElement element)
Determine the mapping condition for the given annotated element.- Parameters:
element- the element to check- Returns:
- the condition, or
null
processDestinations
protected String[] processDestinations(String[] destinations)
Resolve placeholders in the given destinations.- Parameters:
destinations- the destinations- Returns:
- new array with the processed destinations or the same array
getDirectLookupMappings
protected Set<String> getDirectLookupMappings(CompositeMessageCondition mapping)
Description copied from class:AbstractMethodMessageHandlerReturn String-based destinations for the given mapping, if any, that can be used to find matches with a direct lookup (i.e. non-patterns).Note: This is completely optional. The mapping metadata for a subclass may support neither direct lookups, nor String based destinations.
- Specified by:
getDirectLookupMappingsin classAbstractMethodMessageHandler<CompositeMessageCondition>
getDestination
protected RouteMatcher.Route getDestination(Message<?> message)
Description copied from class:AbstractMethodMessageHandlerExtract the destination from the given message.- Specified by:
getDestinationin classAbstractMethodMessageHandler<CompositeMessageCondition>- See Also:
AbstractMethodMessageHandler.getDirectLookupMappings(Object)
getMatchingMapping
protected CompositeMessageCondition getMatchingMapping(CompositeMessageCondition mapping, Message<?> message)
Description copied from class:AbstractMethodMessageHandlerCheck if a mapping matches the current message and return a possibly new mapping with conditions relevant to the current request.- Specified by:
getMatchingMappingin classAbstractMethodMessageHandler<CompositeMessageCondition>- Parameters:
mapping- the mapping to get a match formessage- the message being handled- Returns:
- the match or
nullif there is no match
getMappingComparator
protected Comparator<CompositeMessageCondition> getMappingComparator(Message<?> message)
Description copied from class:AbstractMethodMessageHandlerReturn a comparator for sorting matching mappings. The returned comparator should sort 'better' matches higher.- Specified by:
getMappingComparatorin classAbstractMethodMessageHandler<CompositeMessageCondition>- Parameters:
message- the current Message- Returns:
- the comparator, never
null
createExceptionMethodResolverFor
protected AbstractExceptionHandlerMethodResolver createExceptionMethodResolverFor(Class<?> beanType)
Description copied from class:AbstractMethodMessageHandlerCreate a concrete instance ofAbstractExceptionHandlerMethodResolverthat finds exception handling methods based on some criteria, e.g. based on the presence of@MessageExceptionHandler.- Specified by:
createExceptionMethodResolverForin classAbstractMethodMessageHandler<CompositeMessageCondition>- Parameters:
beanType- the class in which an exception occurred during handling- Returns:
- the resolver to use
handleMatch
protected reactor.core.publisher.Mono<Void> handleMatch(CompositeMessageCondition mapping, HandlerMethod handlerMethod, Message<?> message)
- Overrides:
handleMatchin classAbstractMethodMessageHandler<CompositeMessageCondition>