Request Parameter Handling in SpringMVC

Request Parameter Handling in SpringMVC

1. Retrieving Request Parameters via HttpServletRequest

SpringMVC controllers can access request parameters through the HttpServletRequest object.

<form action="${pageContext.request.contextPath}/auth/login" method="get">
    Username: <input type="text" name="username"/> <br/>
    Password: <input type="password" name="password"/> <br/>
    <input type="submit" />
</form>
@Controller
@RequestMapping("/auth")
public class AuthenticationController {
    @RequestMapping(value = "/loginProcess")
    public String handleLogin(HttpServletRequest request) {
        // Extract parameters from HttpServletRequest
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        System.out.println("Username: " + username + " Password: " + password);
        return "success";
    }
}

2. Retrieving Request Parameters via Controller Method Parameters

Controller method parameters can directly map to request parameters when their names match.

<form action="${pageContext.request.contextPath}/auth/login" method="get">
    Username: <input type="text" name="username"/> <br/>
    Password: <input type="password" name="password"/> <br/>
    <input type="submit" />
</form>
@Controller
@RequestMapping("/auth")
public class AuthenticationController {
    @RequestMapping(value = "/loginProcess")
    // Parameters directly map to request parameters
    public String handleLogin(String username, String password) {
        System.out.println("Username: " + username + " Password: " + password);
        return "success";
    }
}

Important: Method parameter names must match the input field names in the HTML form.

3. Using @RequestParam Annotation

The @RequestParam annotation maps request parameters to handler method parameters, allowing parameter renaming and configuration of required status and default values.

Syntax: @RequestParam(value="paramName", required=true|false, defaultValue="")

  • value: Name of the request parameter
  • required: Whether the parameter is required (default: true)
  • defaultValue: Default value if parameter is not provided
<form action="${pageContext.request.contextPath}/auth/login" method="get">
    Password: <input type="password" name="pwd"/> <br/>
    <input type="submit" />
</form>
@Controller
@RequestMapping("/auth")
public class AuthenticationController {
    @RequestMapping(value = "/loginProcess")
    public String handleLogin(
            @RequestParam(value = "username", required = true, defaultValue = "guest") String user,
            @RequestParam(value = "pwd") String password) {
        
        System.out.println("Username: " + user + " Password: " + password);
        return "success";
    }
}

4. Additional Parameter Binding Annotations

@RequestHeader Annotatino

Maps request header informtaion to controller method parameters.

Properties: value, required, defaultValue (same as @RequestParam)

@CookieValue Annotation

Maps cookie data to controller method parameters.

Properties: value, required, defaultValue (same as @RequestParam)

5. Retrieving Request Parameters via POJO Objects

SpringMVC can bind request parameters to Plain Old Java Objects (POJOs) when parameter names match object properties.

Example POJO structure:

public class UserProfile {
    // Simple property
    private String username;
    
    // Nested object
    private PersonalDetails details;
    
    // Array
    private String interests[];
    
    // List
    private List<String> roles;
    
    // Map
    private Map<String, Organization> organizations;
    
    // Getters and setters omitted
}

HTML form for complex POJO binding:

<form action="${pageContext.request.contextPath}/user/create" method="post">
    Username: <input type="text" name="username" value="johndoe"/> <br/>
    Age: <input type="text" name="details.age" value="30"/> <br/>
    Weight: <input type="text" name="details.weight" value="75"/> <br/>
    Interest 1: <input type="checkbox" name="interests" value="reading" checked>Reading
    <input type="checkbox" name="interests" value="sports" checked>Sports <br/>
    Role 1: <input type="text" name="roles[0]" value="admin"/> <br/>
    Role 2: <input type="text" name="roles[1]" value="user"/> <br/>
    Org1 Name: <input type="text" name="organizations['org1'].name" value="TechCorp"/> <br/>
    Org1 Size: <input type="text" name="organizations['org1'].size" value="large"/> <br/>
    <input type="submit" />
</form>

Controller implementation:

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/create")
    public String createUserProfile(UserProfile profile) {
        // Access properties
        String username = profile.getUsername();
        int age = profile.getDetails().getAge();
        String[] interests = profile.getInterests();
        
        // Process the profile data
        System.out.println("Username: " + username);
        System.out.println("Age: " + age);
        System.out.print("Interests: ");
        for(String interest : interests) {
            System.out.print(interest + " ");
        }
        
        // Process list and map similarly
        return "success";
    }
}

Supporting classes:

public class PersonalDetails {
    private int age;
    private int weight;
    // Getters and setters omitted
}

public class Organization {
    private String name;
    private String size;
    // Getters and setters omitted
}

This approach provides a clean way to handle complex forms with nested objects, arrays, lists, and maps.

Tags: SpringMVC request parameters POJO binding @RequestParam @RequestHeader

Posted on Fri, 29 May 2026 22:46:30 +0000 by longtone