@RequestParam in Spring MVC handling optional parameters @RequestParam in Spring MVC handling optional parameters java java

@RequestParam in Spring MVC handling optional parameters


You need to give required = false for name and password request parameters as well. That's because, when you provide just the logout parameter, it actually expects for name and password as well as they are still mandatory.

It worked when you just gave name and password because logout wasn't a mandatory parameter thanks to required = false already given for logout.


As part of Spring 4.1.1 onwards you now have full support of Java 8 Optional (original ticket) therefore in your example both requests will go via your single mapping endpoint as long as you replace required=false with Optional for your 3 params logout, name, password:

@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,    produces="text/xml")public String showLoginWindow(@PathVariable("id") String id,                              @RequestParam(value = "logout") Optional<String> logout,                              @RequestParam("name") Optional<String> username,                              @RequestParam("password") Optional<String> password,                              @ModelAttribute("submitModel") SubmitModel model,                              BindingResult errors) throws LoginException {...}


Create 2 methods which handle the cases. You can instruct the @RequestMapping annotation to take into account certain parameters whilst mapping the request. That way you can nicely split this into 2 methods.

@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET,                  produces="text/xml", params={"logout"})public String handleLogout(@PathVariable("id") String id,         @RequestParam("logout") String logout) { ... }@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET,                  produces="text/xml", params={"name", "password"})public String handleLogin(@PathVariable("id") String id, @RequestParam("name")         String username, @RequestParam("password") String password,         @ModelAttribute("submitModel") SubmitModel model, BindingResult errors)         throws LoginException {...}