Both Spring MVC and Spring WebFlux support this annotation through a
RequestMappingHandlerMapping and RequestMappingHandlerAdapter
in their respective modules and package structure. For the exact list of
supported handler method arguments and return types in each, please use the
reference documentation links below:

NOTE: When using controller interfaces (e.g. for AOP proxying),
make sure to consistently put all your mapping annotations - such as
@RequestMapping and @SessionAttributes - on
the controller interface rather than on the implementation class.

method

Supported at the type level as well as at the method level!
When used at the type level, all method-level mappings inherit
this HTTP method restriction (i.e. the type-level restriction
gets checked before the handler method is even resolved).

Default:

{}

params

Same format for any environment: a sequence of "myParam=myValue" style
expressions, with a request only mapped if each such parameter is found
to have the given value. Expressions can be negated by using the "!=" operator,
as in "myParam!=myValue". "myParam" style expressions are also supported,
with such parameters having to be present in the request (allowed to have
any value). Finally, "!myParam" style expressions indicate that the
specified parameter is not supposed to be present in the request.

Supported at the type level as well as at the method level!
When used at the type level, all method-level mappings inherit
this parameter restriction (i.e. the type-level restriction
gets checked before the handler method is even resolved).

Parameter mappings are considered as restrictions that are enforced at
the type level. The primary path mapping (i.e. the specified URI value)
still has to uniquely identify the target handler, with parameter mappings
simply expressing preconditions for invoking the handler.

Default:

{}

headers

Same format for any environment: a sequence of "My-Header=myValue" style
expressions, with a request only mapped if each such header is found
to have the given value. Expressions can be negated by using the "!=" operator,
as in "My-Header!=myValue". "My-Header" style expressions are also supported,
with such headers having to be present in the request (allowed to have
any value). Finally, "!My-Header" style expressions indicate that the
specified header is not supposed to be present in the request.

Also supports media type wildcards (*), for headers such as Accept
and Content-Type. For instance,

will match requests with a Content-Type of "text/html", "text/plain", etc.

Supported at the type level as well as at the method level!
When used at the type level, all method-level mappings inherit
this header restriction (i.e. the type-level restriction
gets checked before the handler method is even resolved).