Package org.springframework.web.servlet.mvc.condition

# Class ProducesRequestCondition

java.lang.Object
org.springframework.web.servlet.mvc.condition.AbstractRequestCondition<ProducesRequestCondition>
org.springframework.web.servlet.mvc.condition.ProducesRequestCondition

All Implemented Interfaces:
  `RequestCondition<ProducesRequestCondition>`

public final class ProducesRequestCondition extends AbstractRequestCondition<ProducesRequestCondition>
A logical disjunction (' || ') request condition to match a request's 'Accept' header to a list of media type expressions. Two kinds of media type expressions are supported, which are described in `RequestMapping.produces()` and `RequestMapping.headers()` where the header name is 'Accept'. Regardless of which syntax is used, the semantics are the same.

Since:
  3.1
Author:
  Arjen Poutsma, Rossen Stoyanchev

## Constructor Summary

Constructors
Constructor
Description
`ProducesRequestCondition(String... produces)`
Creates a new instance from "produces" expressions.
`ProducesRequestCondition(String[] produces, String[] headers)`
Creates a new instance with "produces" and "header" expressions.
`ProducesRequestCondition(String[] produces, String[] headers, org.springframework.web.accept.ContentNegotiationManager manager)`
Same as `ProducesRequestCondition(String[], String[])` but also accepting a `ContentNegotiationManager`.

## Method Summary

Modifier and Type
Method
Description
`static void`
`clearMediaTypesAttribute(HttpServletRequest request)`
Use this to clear `MEDIA_TYPES_ATTRIBUTE` that contains the parsed, requested media types.
`ProducesRequestCondition`
`combine(ProducesRequestCondition other)`
Returns the "other" instance if it has any expressions; returns "this" instance otherwise.
`int`
`compareTo(ProducesRequestCondition other, HttpServletRequest request)`
Compares this and another "produces" condition as follows: Sort 'Accept' header media types by quality value via `MimeTypeUtils.sortBySpecificity(List)` and iterate the list.
`protected List<org.springframework.web.servlet.mvc.condition.ProducesRequestCondition.ProduceMediaTypeExpression>`
`getContent()`
Return the discrete items a request condition is composed of.
`Set<MediaTypeExpression>`
`getExpressions()`
Return the contained "produces" expressions.
`ProducesRequestCondition`
`getMatchingCondition(HttpServletRequest request)`
Checks if any of the contained media type expressions match the given request 'Content-Type' header and returns an instance that is guaranteed to contain matching expressions only.
`Set<org.springframework.http.MediaType>`
`getProducibleMediaTypes()`
Return the contained producible media types excluding negated expressions.
`protected String`
`getToStringInfix()`
The notation to use when printing discrete items of content.
`boolean`
`isEmpty()`
Whether the condition has any media type expressions.

### Methods inherited from class org.springframework.web.servlet.mvc.condition.AbstractRequestCondition

`equals, hashCode, toString`

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

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

## Constructor Details

### ProducesRequestCondition

public ProducesRequestCondition(String... produces)
Creates a new instance from "produces" expressions. If 0 expressions are provided in total, this condition will match to any request.

Parameters:
  `produces` - expressions with syntax defined by `RequestMapping.produces()`

### ProducesRequestCondition

public ProducesRequestCondition(@Nullable String[] produces, @Nullable String[] headers)
Creates a new instance with "produces" and "header" expressions. "Header" expressions where the header name is not 'Accept' or have no header value defined are ignored. If 0 expressions are provided in total, this condition will match to any request.

Parameters:
  `produces` - expressions with syntax defined by `RequestMapping.produces()`
  `headers` - expressions with syntax defined by `RequestMapping.headers()`

### ProducesRequestCondition

public ProducesRequestCondition(@Nullable String[] produces, @Nullable String[] headers, @Nullable org.springframework.web.accept.ContentNegotiationManager manager)
Same as `ProducesRequestCondition(String[], String[])` but also accepting a `ContentNegotiationManager`.

Parameters:
  `produces` - expressions with syntax defined by `RequestMapping.produces()`
  `headers` - expressions with syntax defined by `RequestMapping.headers()`
  `manager` - used to determine requested media types

## Method Details

### getExpressions

public Set<MediaTypeExpression> getExpressions()
Return the contained "produces" expressions.

### getProducibleMediaTypes

public Set<org.springframework.http.MediaType> getProducibleMediaTypes()
Return the contained producible media types excluding negated expressions.

### isEmpty

public boolean isEmpty()
Whether the condition has any media type expressions.

Overrides:
  `isEmpty` in class `AbstractRequestCondition<ProducesRequestCondition>`
Returns:
  `true` if empty; `false` otherwise

### getContent

protected List<org.springframework.web.servlet.mvc.condition.ProducesRequestCondition.ProduceMediaTypeExpression> getContent()
Description copied from class: `AbstractRequestCondition`
Return the discrete items a request condition is composed of.

For example URL patterns, HTTP request methods, param expressions, etc.

Specified by:
  `getContent` in class `AbstractRequestCondition<ProducesRequestCondition>`
Returns:
  a collection of objects (never `null`)

### getToStringInfix

protected String getToStringInfix()
Description copied from class: `AbstractRequestCondition`
The notation to use when printing discrete items of content.

For example `" || "` for URL patterns or `" && "` for param expressions.

Specified by:
  `getToStringInfix` in class `AbstractRequestCondition<ProducesRequestCondition>`

### combine

public ProducesRequestCondition combine(ProducesRequestCondition other)
Returns the "other" instance if it has any expressions; returns "this" instance otherwise. Practically that means a method-level "produces" overrides a type-level "produces" condition.

Parameters:
  `other` - the condition to combine with.
Returns:
  a request condition instance that is the result of combining the two condition instances.

### getMatchingCondition

@Nullable public ProducesRequestCondition getMatchingCondition(HttpServletRequest request)
Checks if any of the contained media type expressions match the given request 'Content-Type' header and returns an instance that is guaranteed to contain matching expressions only. The match is performed via `MediaType.isCompatibleWith(MediaType)`.

Parameters:
  `request` - the current request
Returns:
  the same instance if there are no expressions; or a new condition with matching expressions; or `null` if no expressions match.

### compareTo

public int compareTo(ProducesRequestCondition other, HttpServletRequest request)
Compares this and another "produces" condition as follows:

1. Sort 'Accept' header media types by quality value via `MimeTypeUtils.sortBySpecificity(List)` and iterate the list.
2. Get the first index of matching media types in each "produces" condition first matching with `MimeType.equals(Object)` and then with `MediaType.includes(MediaType)`.
3. If a lower index is found, the condition at that index wins.
4. If both indexes are equal, the media types at the index are compared further with `MediaType.isMoreSpecific(MimeType)`.

It is assumed that both instances have been obtained via `getMatchingCondition(HttpServletRequest)` and each instance contains the matching producible media type expression only or is otherwise empty.

### clearMediaTypesAttribute

public static void clearMediaTypesAttribute(HttpServletRequest request)
Use this to clear `MEDIA_TYPES_ATTRIBUTE` that contains the parsed, requested media types.

Parameters:
  `request` - the current request
Since:
  5.2