Spring MVC Annotations – Explained
The various annotations which can be used in the Spring MVC controllers can be summarized as below, with basic brief explanation of each:
- @Controller – stereotype annotation telling the Spring container that it is a valid Spring bean and a Spring MVC controller class.
- @RequestMapping – Can be used in class and method level and defines the URL mapping. Available properties are: method (supported HTTP methods like GET, POST etc.), produces (Content type produced), consumes (Content type which will be consumed), params (the URL need to have these query parameters) and headers (the request header should have these header information).
- @PathVariable – allows using part of the URI to be used in the Java coding. It supports regular expression and can be only used for simple types, java.lang.String and Date variants.
- @ModelAttribute – can be used to define new model attributes and can also be used for accessing existing model attributes.
- @CookieValue – provides access to client side cookies.
- @HeaderValue – provides access to HTTP request header values.
- @DateTimeFormat – allows conversion of String to date type. Capable of supporting various conventions.
- @RequestBody – provides access to HTTP request body.
- @ResponseBody – capable of converting return value to HTTP response body.
Having understood the options which can be used with @RequestMapping annotation, the method signature to be used as the request handler need to follow some patterns. In general Spring MVC does allow having very flexible method signature but arguments can be supplied in any order, some of which are as shown below:
- HttpServletRequest, HttpServletResponse
- HttpSession
- Locale
- Model
- Principal etc.
View and ViewResolver
A View is the final output which the client sees on the browser. It renders the data available in the Model object in a formatted and presentable manner in a browser to the requesting user. The views can be classified based on various criteria’s. In one such classification, it can be broadly divided into two types based on: content type and rendering technology. Examples of content type based views are HTML, Excel, PDF etc. and according to rendering type based views are JSP, Velocity, Facelets etc. There are built-in views in Spring MVC which can be summarized as shown in Table 14-2 below.
Table 14-2. Built-in views in Spring MVC
View Classes | Description |
InternalResourceView | Resides in package org.springframework.web.servlet.view.View which is actually a wrapper for JSP’s and other resources within the same web application. |
JstlView | Resides in package org.springframework.web.servlet.view.Maps to JSTL pages, which are nothing but JSP page containing JSP standard tag libraries (JSTL). |
RedirectView | Resides in package org.springframework.web.servlet.view .View which redirects to absolute, context relative or current context relative URL’s. The HTTP redirect happens to the specified URL. |
TilesView, TilesJstlView | Resides in package org.springframework.web.servlet.view.tiles.Both are deprecated as of 3.0. TilesView is used for retrieving Tiles definition and TilesJstlView is specialization of TilesView for JSTL pages. |
VelocityView, VelocityLayoutView, VelocityToolboxView | Resides in package org.springframework.web.servlet.view.velocity.VelocityView uses Velocity template engine. Spring3.0’s VelocityTemplate requires Velocity 1.4 or higher.Velocity’s VelocityLayoutServlet is used to compose various page templates together, VelocityLayoutView imitates this.VelocityToolboxView extends VelocityView by supporting Velocity Tools toolboxes. |
FreeMarkerView | Resides in package org.springframework.web.servlet.view.freemarker.View using FreeMarker template engine. |
JasperReportsMultiFormatView, JasperReportsPdfView, JasperReportsXlsView, JasperReportsCsvView, JasperReportsHtmlView | Resides in package org.springframework.web.servlet.view.jasperreports.Support for Jasper reports. |
All the handler methods in the controller class should finally resolve to a logical view name either explicitly by returning String (view URL), View or ModelAndView object or implicitly based on various conventions available in Spring MVC. In Spring MVC the views are resolved using a ViewResolver and the framework does provide various view resolvers as shown in Table 14-3 below which could be configured and used as is.
Table 14-3. Built-in view resolvers
View resolver | Description |
BeanNameViewResolver | Simple implementation of ViewResolver which resolves view by mapping the name to the bean name as declared in the Spring configuration file. |
UrlBasedViewResolver | Simple implementation in which symbolic view names translates into the exact URL or using augmented prefix and suffix translates into final URL where it is to be navigated. |
InternalResourceViewResolver | Subclass of UrlBasedViewResolver which supports InternalResourceView such as JSP’s and other web application resources as well as view subclasses like JstlView. |
VelocityViewResolver | Subclass of UrlBasedViewResolver which supports VelocityView and its various subclasses. |
VelocityLayoutViewResolver | Subclass of VelocityViewResolver specialized in handling VelocityLayoutView and its properties. |
FreeMarkerViewResolver | Subclass of UrlBasedViewResolver which supports FreeMarkerView and its various subclasses. |
ResourceBundleViewResolver | ViewResolver implementation which resolves views defined in a ResourceBundle. These are typically properties files located in the classpath and by default take the name views.properties. |
XmlViewResolver | ViewResolver implementation which resolves views defined in an XML file. The default path being “/WEB-INF/views.xml”. |
XsltViewResolver | It takes in the symbolic view names and tries to derive at the URL and finds the XsltView associated with it. |
JasperReportsViewResolver | Resolves supplied view name into the final URL pointing to the report file. |
ContentNegotiatingViewResolver | Resolves the view based on the request file name or the “Accept” header (HTML header, META tags). It either resolves the view by itself or in-turn uses other view resolvers for doing this. |
ViewResolver’s decouples the controller from the view implementation giving capability to the application developer to switch the view from one to another by mere changing of the view resolver. Listing 14-7 below shows the ViewResolver interface definition in Spring MVC. Custom view resolvers can be written by extending ViewResolver interface.
Listing 14-7. ViewResolver interface definition
1 2 3 4 |
package org.springframework.web.servlet; public interface ViewResolver{ View resolveViewName(String viewName, Locale locale); } |
Page Visitors: 7466

Tomcy John

Latest posts by Tomcy John (see all)
- A Guide to Continuous Improvement for Architects - February 2, 2023
- Cloud-first Architecture Strategy - January 26, 2023
- Architecture Strategy and how to create One - January 24, 2023