4

How I can pass a Map parameter as a GET param in url to Spring REST controller ?

2
  • See this question, and its answers: stackoverflow.com/questions/29387877/… Commented Nov 7, 2015 at 10:01
  • Thanks, but I know how to catch it with a POST The question was about GET Commented Nov 7, 2015 at 10:03

2 Answers 2

9

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/

Sign up to request clarification or add additional context in comments.

Comments

5

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

3 Comments

Thanks Ralph! What do you think about an approach where we will pass @PathVariable List<String> map and map 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..
Why 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/…
because currently I have a following mapping @RequestMapping(value = "/criteria/{criteriaIds} where criteriaIds is a @PathVariable List<Long> criteriaIds. Right now I need to add double weight to some of criteriaId in criteriaIds list.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.