Map parameter as GET param in Spring REST controller
11,703
Solution 1
There are different ways (but a simple @RequestParam('myMap')Map<String,String>
does not work - maybe not true anymore!)
The (IMHO) easiest solution is to use a command object then you could use [key]
in the url to specifiy the map key:
@Controller
@RequestMapping("/demo")
public class DemoController {
public static class Command{
private Map<String, String> myMap;
public Map<String, String> getMyMap() {return myMap;}
public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}
@Override
public String toString() {
return "Command [myMap=" + myMap + "]";
}
}
@RequestMapping(method=RequestMethod.GET)
public ModelAndView helloWorld(Command command) {
System.out.println(command);
return null;
}
}
- Request: http://localhost:8080/demo?myMap[line1]=hello&myMap[line2]=world
- Output:
Command [myMap={line1=hello, line2=world}]
Tested with Spring Boot 1.2.7
Solution 2
It’s possible to bind all request parameters in a Map just by adding a Map object after the annotation:
@RequestMapping("/demo")
public String example(@RequestParam Map<String, String> map){
String apple = map.get("APPLE");//apple
String banana = map.get("BANANA");//banana
return apple + banana;
}
Request
/demo?APPLE=apple&BANANA=banana
Source -- https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/
Related videos on Youtube
Author by
alexanoid
Updated on October 15, 2022Comments
-
alexanoid over 1 year
How I can pass a Map parameter as a GET param in url to Spring REST controller ?
-
alexanoid over 8 yearsThanks Ralph! What do you think about an approach where we will pass
@PathVariable List<String> map
andmap
will contain something like this:12:34,833:73,90:25
In the controller logic we can split list elements by ":" and get key/value pairs.. -
Ralph over 8 yearsWhy do you want to do this, when the "save" solution is so easy? I you want to map it by your own, then you should have a look at matix variables: docs.spring.io/spring/docs/current/spring-framework-reference/… and captaindebug.com/2013/04/…
-
alexanoid over 8 yearsbecause currently I have a following mapping
@RequestMapping(value = "/criteria/{criteriaIds}
wherecriteriaIds
is a@PathVariable List<Long> criteriaIds
. Right now I need to add double weight to some ofcriteriaId
in criteriaIds list.