Search code examples
javaspringspring-bootdata-bindingparameters

Spring MVC populate @RequestParam Map<String, String>


I have the following method in my Spring MVC @Controller :

@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam(value="test") Map<String, String> test) {   
    (...)
}

I call it like this :

http://myUrl?test[A]=ABC&test[B]=DEF

However the "test" RequestParam variable is always null

What do I have to do in order to populate "test" variable ?


Solution

  • As detailed here https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

    If the method parameter is Map or MultiValueMap and a parameter name is not specified, then the map parameter is populated with all request parameter names and values.

    So you would change your definition like this.

    @RequestMapping(method = RequestMethod.GET)
    public String testUrl(@RequestParam Map<String, String> parameters) 
    {   
      (...)
    }
    

    And in your parameters if you called the url http://myUrl?A=ABC&B=DEF

    You would have in your method

    parameters.get("A");
    parameters.get("B");