@RequestMapping handler methods
Supported method argument types
The following are the supported method arguments:
-
Request or response objects (Servlet API). Choose any specific request or response type, for example
ServletRequestorHttpServletRequest. -
Session object (Servlet API) of type
HttpSession. An argument of this type enforces the presence of a corresponding session. As a consequence, such an argument is nevernull.
|
Note
|
Session access may not be thread-safe, in particular in a Servlet environment. Consider
setting the |
-
org.springframework.web.context.request.WebRequestororg.springframework.web.context.request.NativeWebRequest. Allows for generic request parameter access as well as request/session attribute access, without ties to the native Servlet/Portlet API. -
java.util.Localefor the current request locale, determined by the most specific locale resolver available, in effect, the configuredLocaleResolver/LocaleContextResolverin an MVC environment. -
java.util.TimeZone(Java 6+) /java.time.ZoneId(on Java 8) for the time zone associated with the current request, as determined by aLocaleContextResolver. -
java.io.InputStream/java.io.Readerfor access to the request’s content. This value is the raw InputStream/Reader as exposed by the Servlet API. -
java.io.OutputStream/java.io.Writerfor generating the response’s content. This value is the raw OutputStream/Writer as exposed by the Servlet API. -
org.springframework.http.HttpMethodfor the HTTP request method. -
java.security.Principalcontaining the currently authenticated user. -
@PathVariableannotated parameters for access to URI template variables. See [mvc-ann-requestmapping-uri-templates]. -
@MatrixVariableannotated parameters for access to name-value pairs located in URI path segments. See [mvc-ann-matrix-variables]. -
@RequestParamannotated parameters for access to specific Servlet request parameters. Parameter values are converted to the declared method argument type. See [mvc-ann-requestparam]. -
@RequestHeaderannotated parameters for access to specific Servlet request HTTP headers. Parameter values are converted to the declared method argument type. See [mvc-ann-requestheader]. -
@RequestBodyannotated parameters for access to the HTTP request body. Parameter values are converted to the declared method argument type usingHttpMessageConverters. See [mvc-ann-requestbody]. -
@RequestPartannotated parameters for access to the content of a "multipart/form-data" request part. See [mvc-multipart-forms-non-browsers] and [mvc-multipart]. -
@SessionAttributeannotated parameters for access to existing, permanent session attributes (e.g. user authentication object) as opposed to model attributes temporarily stored in the session as part of a controller workflow via@SessionAttributes. -
@RequestAttributeannotated parameters for access to request attributes. -
HttpEntity<?>parameters for access to the Servlet request HTTP headers and contents. The request stream will be converted to the entity body usingHttpMessageConverters. See [mvc-ann-httpentity]. -
java.util.Map/org.springframework.ui.Model/org.springframework.ui.ModelMapfor enriching the implicit model that is exposed to the web view. -
org.springframework.web.servlet.mvc.support.RedirectAttributesto specify the exact set of attributes to use in case of a redirect and also to add flash attributes (attributes stored temporarily on the server-side to make them available to the request after the redirect). See [mvc-redirecting-passing-data] and [mvc-flash-attributes]. -
Command or form objects to bind request parameters to bean properties (via setters) or directly to fields, with customizable type conversion, depending on
@InitBindermethods and/or the HandlerAdapter configuration. See thewebBindingInitializerproperty onRequestMappingHandlerAdapter. Such command objects along with their validation results will be exposed as model attributes by default, using the command class name - e.g. model attribute "orderAddress" for a command object of type "some.package.OrderAddress". TheModelAttributeannotation can be used on a method argument to customize the model attribute name used. -
org.springframework.validation.Errors/org.springframework.validation.BindingResultvalidation results for a preceding command or form object (the immediately preceding method argument). -
org.springframework.web.bind.support.SessionStatusstatus handle for marking form processing as complete, which triggers the cleanup of session attributes that have been indicated by the@SessionAttributesannotation at the handler type level. -
org.springframework.web.util.UriComponentsBuildera builder for preparing a URL relative to the current request’s host, port, scheme, context path, and the literal part of the servlet mapping.
The Errors or BindingResult parameters have to follow the model object that is being
bound immediately as the method signature might have more than one model object and
Spring will create a separate BindingResult instance for each of them.
|
Note
|
JDK 1.8’s |
Supported method return types
The following are the supported return types:
-
A
ModelAndViewobject, with the model implicitly enriched with command objects and the results of@ModelAttributeannotated reference data accessor methods. -
A
Modelobject, with the view name implicitly determined through aRequestToViewNameTranslatorand the model implicitly enriched with command objects and the results of@ModelAttributeannotated reference data accessor methods. -
A
Mapobject for exposing a model, with the view name implicitly determined through aRequestToViewNameTranslatorand the model implicitly enriched with command objects and the results of@ModelAttributeannotated reference data accessor methods. -
A
Viewobject, with the model implicitly determined through command objects and@ModelAttributeannotated reference data accessor methods. The handler method may also programmatically enrich the model by declaring aModelargument (see above). -
A
Stringvalue that is interpreted as the logical view name, with the model implicitly determined through command objects and@ModelAttributeannotated reference data accessor methods. The handler method may also programmatically enrich the model by declaring aModelargument (see above). -
voidif the method handles the response itself (by writing the response content directly, declaring an argument of typeServletResponse/HttpServletResponsefor that purpose) or if the view name is supposed to be implicitly determined through aRequestToViewNameTranslator(not declaring a response argument in the handler method signature). -
If the method is annotated with
@ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type usingHttpMessageConverters. See [mvc-ann-responsebody]. -
An
HttpEntity<?>orResponseEntity<?>object to provide access to the Servlet response HTTP headers and contents. The entity body will be converted to the response stream usingHttpMessageConverters. See [mvc-ann-httpentity]. -
An
HttpHeadersobject to return a response with no body. -
A
Callable<?>can be returned when the application wants to produce the return value asynchronously in a thread managed by Spring MVC. -
A
DeferredResult<?>can be returned when the application wants to produce the return value from a thread of its own choosing. -
A
ListenableFuture<?>can be returned when the application wants to produce the return value from a thread of its own choosing. -
A
ResponseBodyEmittercan be returned to write multiple objects to the response asynchronously; also supported as the body within aResponseEntity. -
An
SseEmittercan be returned to write Server-Sent Events to the response asynchronously; also supported as the body within aResponseEntity. -
A
StreamingResponseBodycan be returned to write to the response OutputStream asynchronously; also supported as the body within aResponseEntity. -
Any other return type is considered to be a single model attribute to be exposed to the view, using the attribute name specified through
@ModelAttributeat the method level (or the default attribute name based on the return type class name). The model is implicitly enriched with command objects and the results of@ModelAttributeannotated reference data accessor methods.