Class DestinationPatternsMessageCondition

java.lang.Object
org.springframework.messaging.handler.AbstractMessageCondition<DestinationPatternsMessageCondition>
org.springframework.messaging.handler.DestinationPatternsMessageCondition
All Implemented Interfaces:
MessageCondition<DestinationPatternsMessageCondition>

public class DestinationPatternsMessageCondition extends AbstractMessageCondition<DestinationPatternsMessageCondition>
MessageCondition to match the destination header of a Message against one or more patterns through a RouteMatcher.
Since:
4.0
Author:
Rossen Stoyanchev
  • Field Details

    • LOOKUP_DESTINATION_HEADER

      public static final String LOOKUP_DESTINATION_HEADER
      The name of the "lookup destination" header.
      See Also:
  • Constructor Details

    • DestinationPatternsMessageCondition

      public DestinationPatternsMessageCondition(String... patterns)
      Constructor with patterns only. Creates and uses an instance of AntPathMatcher with default settings.

      Non-empty patterns that don't start with "/" are prepended with "/".

      Parameters:
      patterns - the URL patterns to match to, or if 0 then always match
    • DestinationPatternsMessageCondition

      public DestinationPatternsMessageCondition(String[] patterns, @Nullable org.springframework.util.PathMatcher matcher)
      Constructor with patterns and a PathMatcher instance.
      Parameters:
      patterns - the URL patterns to match to, or if 0 then always match
      matcher - the PathMatcher to use
    • DestinationPatternsMessageCondition

      public DestinationPatternsMessageCondition(String[] patterns, org.springframework.util.RouteMatcher routeMatcher)
      Constructor with patterns and a RouteMatcher instance.
      Parameters:
      patterns - the URL patterns to match to, or if 0 then always match
      routeMatcher - the RouteMatcher to use
      Since:
      5.2
  • Method Details

    • getPatterns

      public Set<String> getPatterns()
    • getContent

      protected Collection<String> getContent()
      Description copied from class: AbstractMessageCondition
      Return the collection of objects the message condition is composed of (e.g. destination patterns), never null.
      Specified by:
      getContent in class AbstractMessageCondition<DestinationPatternsMessageCondition>
    • getToStringInfix

      protected String getToStringInfix()
      Description copied from class: AbstractMessageCondition
      The notation to use when printing discrete items of content. For example " || " for URL patterns or " && " for param expressions.
      Specified by:
      getToStringInfix in class AbstractMessageCondition<DestinationPatternsMessageCondition>
    • combine

      Returns a new instance with URL patterns from the current instance ("this") and the "other" instance as follows:
      • If there are patterns in both instances, combine the patterns in "this" with the patterns in "other" using PathMatcher.combine(String, String).
      • If only one instance has patterns, use them.
      • If neither instance has patterns, use an empty String (i.e. "").
      Parameters:
      other - the condition to combine with
      Returns:
      the resulting message condition
    • getMatchingCondition

      @Nullable public DestinationPatternsMessageCondition getMatchingCondition(Message<?> message)
      Check if any of the patterns match the given Message destination and return an instance that is guaranteed to contain matching patterns, sorted via PathMatcher.getPatternComparator(String).
      Parameters:
      message - the message to match to
      Returns:
      the same instance if the condition contains no patterns; or a new condition with sorted matching patterns; or null either if a destination can not be extracted or there is no match
    • compareTo

      public int compareTo(DestinationPatternsMessageCondition other, Message<?> message)
      Compare the two conditions based on the destination patterns they contain. Patterns are compared one at a time, from top to bottom via PathMatcher.getPatternComparator(String). If all compared patterns match equally, but one instance has more patterns, it is considered a closer match.

      It is assumed that both instances have been obtained via getMatchingCondition(Message) to ensure they contain only patterns that match the request and are sorted with the best matches on top.