Class MediaTypeRequestMatcher

  • All Implemented Interfaces:
    RequestMatcher

    public final class MediaTypeRequestMatcher
    extends java.lang.Object
    implements RequestMatcher
    Allows matching HttpServletRequest based upon the MediaType's resolved from a ContentNegotiationStrategy. By default, the matching process will perform the following:
    • The ContentNegotiationStrategy will resolve the MediaType 's for the current request
    • Each matchingMediaTypes that was passed into the constructor will be compared against the MediaType instances resolved from the ContentNegotiationStrategy.
    • If one of the matchingMediaTypes is compatible with one of the resolved MediaType returned from the ContentNegotiationStrategy, then it returns true
    For example, consider the following example
     GET /
     Accept: application/json
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     assert matcher.matches(request) == true // returns true
     
    The following will also return true
     GET /
     Accept: */*
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     assert matcher.matches(request) == true // returns true
     

    Ignoring Media Types

    Sometimes you may want to ignore certain types of media types. For example, you may want to match on "application/json" but ignore "*/" sent by a web browser.
     GET /
     Accept: */*
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     matcher.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL));
     assert matcher.matches(request) == false // returns false
     
     GET /
     Accept: application/json
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     matcher.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL));
     assert matcher.matches(request) == true // returns true
     

    Exact media type comparison

    By default as long as the MediaType discovered by ContentNegotiationStrategy returns true for MediaType.isCompatibleWith(MediaType) on the matchingMediaTypes, the result of the match is true. However, sometimes you may want to perform an exact match. This can be done with the following examples:
     GET /
     Accept: application/json
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     matcher.setUseEquals(true);
     assert matcher.matches(request) == true // returns true
     
     GET /
     Accept: application/*
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     matcher.setUseEquals(true);
     assert matcher.matches(request) == false // returns false
     
     GET /
     Accept: */*
    
     ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
     MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
     matcher.setUseEquals(true);
     assert matcher.matches(request) == false // returns false
     
    Since:
    3.2
    • Constructor Summary

      Constructors 
      Constructor Description
      MediaTypeRequestMatcher​(java.util.Collection<org.springframework.http.MediaType> matchingMediaTypes)
      Creates an instance
      MediaTypeRequestMatcher​(org.springframework.http.MediaType... matchingMediaTypes)
      Creates an instance
      MediaTypeRequestMatcher​(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, java.util.Collection<org.springframework.http.MediaType> matchingMediaTypes)
      Creates an instance
      MediaTypeRequestMatcher​(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, org.springframework.http.MediaType... matchingMediaTypes)
      Creates an instance
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean matches​(javax.servlet.http.HttpServletRequest request)
      Decides whether the rule implemented by the strategy matches the supplied request.
      void setIgnoredMediaTypes​(java.util.Set<org.springframework.http.MediaType> ignoredMediaTypes)
      Set the MediaType to ignore from the ContentNegotiationStrategy.
      void setUseEquals​(boolean useEquals)
      If set to true, matches on exact MediaType, else uses MediaType.isCompatibleWith(MediaType).
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • MediaTypeRequestMatcher

        public MediaTypeRequestMatcher​(org.springframework.http.MediaType... matchingMediaTypes)
        Creates an instance
        Parameters:
        matchingMediaTypes - the MediaType that will make the http request.
        Since:
        5.2
      • MediaTypeRequestMatcher

        public MediaTypeRequestMatcher​(java.util.Collection<org.springframework.http.MediaType> matchingMediaTypes)
        Creates an instance
        Parameters:
        matchingMediaTypes - the MediaType that will make the http request.
        Since:
        5.2
      • MediaTypeRequestMatcher

        public MediaTypeRequestMatcher​(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy,
                                       org.springframework.http.MediaType... matchingMediaTypes)
        Creates an instance
        Parameters:
        contentNegotiationStrategy - the ContentNegotiationStrategy to use
        matchingMediaTypes - the MediaType that will make the RequestMatcher return true
      • MediaTypeRequestMatcher

        public MediaTypeRequestMatcher​(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy,
                                       java.util.Collection<org.springframework.http.MediaType> matchingMediaTypes)
        Creates an instance
        Parameters:
        contentNegotiationStrategy - the ContentNegotiationStrategy to use
        matchingMediaTypes - the MediaType that will make the RequestMatcher return true
    • Method Detail

      • matches

        public boolean matches​(javax.servlet.http.HttpServletRequest request)
        Description copied from interface: RequestMatcher
        Decides whether the rule implemented by the strategy matches the supplied request.
        Specified by:
        matches in interface RequestMatcher
        Parameters:
        request - the request to check for a match
        Returns:
        true if the request matches, false otherwise
      • setUseEquals

        public void setUseEquals​(boolean useEquals)
        If set to true, matches on exact MediaType, else uses MediaType.isCompatibleWith(MediaType).
        Parameters:
        useEquals - specify if equals comparison should be used.
      • setIgnoredMediaTypes

        public void setIgnoredMediaTypes​(java.util.Set<org.springframework.http.MediaType> ignoredMediaTypes)
        Set the MediaType to ignore from the ContentNegotiationStrategy. This is useful if for example, you want to match on MediaType.APPLICATION_JSON but want to ignore MediaType.ALL.
        Parameters:
        ignoredMediaTypes - the MediaType's to ignore from the ContentNegotiationStrategy
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object