Spring @RequestParam Annotation
Spring @RequestParam
annotation is used to fetch the value of a parameter in the form request. In Spring MVC, "request parameters" map to query parameters, form data.
For example, if we want to get parameter(user_name) value from a requested URL then we can use @RequestParam
annotation. We just need to provide a parameter name.
http://localhost:8080/spring-mvc-app/showdata?user_name=studytonight
In the above URL, the parameter is: user_name and value: studytonight and we can fetch it in our application like:
@RequestMapping("showdata")
public String userForm(@RequestParam("user_name") String name, Model model)
{
model.addAttribute("name", name);
return "user-data";
}
The @RequestParam
annotation uses several attributes like name, required, defaultvalue, etc. We can use them in our application based on the use cases.
DefaultValue Attribute
Set DefaultValue for the parameter, to avoid null value. We can use this attribute to handle missing values. If the parameter does not contain any value then this default value will be supplied.
@RequestMapping("showdata")
public String userForm(@RequestParam(defaultValue = "No_value") String name, Model model)
{
model.addAttribute("name", name);
return "user-data";
}
Required Attribute
The required attribute is used to handle exceptions in case of missing data. It throws HTTP Status 400 – Bad Request (Required String parameter 'user_name' is not present). To avoid this exception, we can use the required attribute.
@RequestMapping("showdata")
public String userForm(@RequestParam(required = false) String name, Model model)
{
model.addAttribute("name", name);
return "user-data";
}
Java 8 Optional Class
We can use Optional
class to avoid exceptions in case of missing data by providing a value. It is similar to the default attribute but can be used if you are working with java 8 or higher version.
@RequestMapping("showdata")
public String userForm(@RequestParam Optional<String> name, Model model)
{
String name1 = name.orElseGet(()->"no value found");
model.addAttribute("name", name1);
return "user-data";
}
@RequestParam Attributes
The following are the attributes list of @RequestParam annotation.
Type and Element
|
Description
|
String defaultValue
|
This element is used to set a default value to the parameter.
|
String name
|
It indicates the name of the request parameter to bind to.
|
boolean required
|
It is used to set whether the parameter is required.
|
String value
|
It is similar to name elements and can be used as an alias.
|
Spring @RequestParam Annotation Working Example
Let's understand by example and create a maven-based Spring application and add these files. After that run this example using a web server (Apache Tomcat). See the source code of the project.
// HelloController.java
It is a controller class file that uses @Controller
annotation. It shows a user form and by submitting that form it shows the data entered by the user.
package com.studytonight.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@RequestMapping("/")
public String showForm() {
return "user-form";
}
@RequestMapping("showdata")
public String userForm(@RequestParam("user_name") String name, Model model)
{
model.addAttribute("name", name);
return "user-data";
}
}
// user-form.jsp
It is a JSP page that shows an HTML form to get user information.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>User Form</title>
</head>
<body>
<form action="showdata" method="Get">
<label>Enter User Name: </label><input type="text" name="user_name"><br/><br/>
<input type="submit" />
</form>
</body>
</html>
// user-data.jsp
This JSP page shows the data submitted by the user.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Hello JSP</title>
</head>
<body>
<strong>Hello,</strong>
${name}
</body>
</html>
// spring-mvc-app-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- Step 3: Add support for component scanning -->
<context:component-scan base-package="com.studytonight.controller" />
<!-- Step 4: Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>
<!-- Step 5: Define Spring MVC view resolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
// web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>spring-mvc-app</display-name>
<absolute-ordering />
<!-- Spring MVC Configs -->
<!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc-app-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
// pom.xml
This file contains all the dependencies of this project such as spring jars, servlet jars, etc. Put these dependencies into your project to run the application.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.studytonight</groupId>
<artifactId>spring-mvc-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<properties>
<spring.version>5.2.8.RELEASE</spring.version>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run the Application
After successfully completing the project and adding the dependencies run the application and you will get the output as below.
This is the second JSP page that shows the user name submitted by the above user name.