This
is continuation to my previous post, in my previous post, I explained how to
bound path variables to method arguments using @PathVariable annotation. In
this post, I am going to show you how can you bound multiple path variables.
hello.jsp
web.xml
If
you have multiple path variables in the url, it doesn't looks good if you try
to bound them to the method arguments. Suppose if there are 5 path variables,
we need to write a method with 5 arguments like below.
@RequestMapping("welcome/{countryName}/{state}/{firstName}/{lastName}/{customMsg}")
public
ModelAndView getWelcomeMsg(@PathVariable("countryName") String
countryName,
@PathVariable("state")
String state, @PathVariable("firstName") String firstName,
@PathVariable("lastName")
String lastName, @PathVariable("customMsg") String customMsg) {
.....
.....
}
What
if you want to bound 10 path variables, would you like to write a method of 10
arguments? Obviously, No.
Spring
MVC provides a better way to handle multiple path variable. You can map all the
path variables to map like below.
@RequestMapping("welcome/{countryName}/{userName}")
public
ModelAndView getWelcomeMessage(@PathVariable Map<String, String>
pathVariables) {
String name =
pathVariables.get("userName");
String country =
pathVariables.get("countryName");
.....
.....
}
As
you see above snippet, I mapped all the path variables to a map and access the
path variable value using the map.
Find
the below working application.
HelloWorldController.java
package com.sample.myApp.controllers; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("greeting") public class HelloWorldController { @RequestMapping("welcome/{countryName}/{userName}") public ModelAndView getWelcomeMessage(@PathVariable Map<String, String> pathVariables) { String name = pathVariables.get("userName"); String country = pathVariables.get("countryName"); ModelAndView modelAndView = new ModelAndView("hello"); String msg = String.format("Hello %s, You are from %s", name, country); modelAndView.addObject("message", msg); return modelAndView; } }
Create
hello.jsp file under WEB-INF/jsp folder.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Hello World Spring Web MVC</title> </head> <body> <h2>${message}</h2> </body> </html>
Create
web.xml, HelloWorld-servlet.xml files under WEB-INF folder.
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Hello WorldApplication</display-name> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
HelloWorld-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.sample.myApp" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
Create
index.jsp file under webapp folder.
index.jsp
<html> <body> <h2>Hello World!</h2> </body> </html>
Total
project structure looks like below.
Run
the application on server and hit the below url.
No comments:
Post a Comment