Package org.springframework.security.web.util.matcher

# Class MediaTypeRequestMatcher

java.lang.Object
org.springframework.security.web.util.matcher.MediaTypeRequestMatcher

All Implemented Interfaces:
  `RequestMatcher`

public final class MediaTypeRequestMatcher extends 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

## Nested Class Summary

## Nested classes/interfaces inherited from interface org.springframework.security.web.util.matcher.RequestMatcher

`RequestMatcher.MatchResult`

## Constructor Summary

Constructors
Constructor
Description
`MediaTypeRequestMatcher(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, 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

Modifier and Type
Method
Description
`boolean`
`matches(jakarta.servlet.http.HttpServletRequest request)`
Decides whether the rule implemented by the strategy matches the supplied request.
`void`
`setIgnoredMediaTypes(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)`.
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.security.web.util.matcher.RequestMatcher

`matcher`

## Constructor Details

### 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(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, 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 Details

### matches

public boolean matches(jakarta.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(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 String toString()

Overrides:
  `toString` in class `Object`