This tutorial will show you how we use @PathVariable annotation in Spring MVC. The @PathVariable annotation is used on a method argument to bind it to the value of a URI template variable.

For this tutorial we will create maven based web project in Eclipse.

If you already have an idea on how to create a maven project in Eclipse will be great otherwise I will tell you here how to create a maven project in Eclipse.

The following configurations are required in order to run the application
JDK 1.7
Tomcat 7
Have maven installed and configured
Spring 4 and JSTL API dependencies in pom.xml
Now we will see the below steps how to create a maven based spring project in Eclipse
Step 1. Create a maven based web project in Eclipse

Go to File -> New -> Other. On popup window under Maven select Maven Project. Then click on Next. Select the workspace location – either default or browse the location. Click on Next. Now in next window select the row as highlighted from the below list of archtypes and click on Next button.

Now enter the required fields (Group Id, Artifact Id) as shown below
Group Id : com.roytuts
Artifact Id : spring
Step 2. Modify the pom.xml file as shown below.

<project xmlns="" xmlns:xsi=""
        <!-- spring-context which provides core functionality -->
        <!-- The spring-aop module provides an AOP(aspect-oriented programming)
            implementation -->
        <!-- The spring-webmvc module contains Spring’s model-view-controller (MVC)
            and REST Web Services implementation for web applications -->
        <!-- The spring-web module provides basic web-oriented integration features
            such as multipart file upload functionality and the initialization of the
            IoC container using Servlet listeners and a web-oriented application context -->
        <!-- jstl -->

Step 3. If you see JRE System Library[J2SE-1.4] then change the version by below process

Do right-click on the project and go to Build -> Configure build path, under Libraries tab click on JRE System Library[J2SE-1.4], click on Edit button and select the appropriate jdk 1.7 from the next window. Click on Finish then Ok.

Step 4. Create Spring XML configuration file controllers.xml under src/main/resources/spring directory

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""
    xmlns:xsi="" xmlns:p=""
    <!-- Support annotation -->
    <!-- Scan the package where Spring Controllers are placed -->
    <context:component-scan base-package="com.roytuts.spring.controllers" />
    <!-- Resolves logical String-based view names to actual View types -->
    <bean id="viewResolver"
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <!-- Where pages are kept -->
        <property name="prefix" value="/" />
        <!-- What is the page extension -->
        <property name="suffix" value=".jsp" />

Step 5. Create Controller class

package com.roytuts.spring.controllers;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
public class HelloWorldController {
  @RequestMapping(value = "helloWorld/{msg}")//{msg} specifies the variable name 'msg'
  public String helloWorld(@PathVariable String msg, Model model) {
    model.addAttribute("today", new Date());
    model.addAttribute("msg", msg);
    return "hello";

To process the @PathVariable annotation, Spring MVC needs to find the matching URI template variable by name. We can specify it in the annotation:

@RequestMapping(value = "helloWorld/{msg}")
public String helloWorld(@PathVariable("msg") String theMsg, Model model) {

Or if the URI template variable name matches the method argument name we can omit that detail. As long as your code is not compiled without debugging information, Spring MVC will match the method argument name to the URI template variable name:

@RequestMapping(value = "helloWorld/{msg}")
public String helloWorld(@PathVariable String msg, Model model) {

Step 6. Now modify web.xml file

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="" xmlns:xsi=""
    <display-name>Spring MVC</display-name>
    <!-- dispatcher servlet acts as a front controller for each request/response -->
        <!-- load Spring controllers while dispatcher servlet loads -->
    <!-- map URL suffix as .html -->

Step 7. Create hello.jsp file under webapp folder

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    <h2>Hello World!</h2>
    Today is ${today}
    <strong>@PathVariable</strong> msg value is <i>${msg}</i>

Step 8. Now run the application you will see the below output in the browser.

spring mvc pathvariable

Thanks for reading.


Leave a Reply

Your email address will not be published. Required fields are marked *