Spring MVC populate @RequestParam Map<String, String>

佐手、 提交于 2019-12-01 18:25:22

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");

Spring doesn't have default conversion strategy from multiple parameters with the same name to HashMap. It can, however, convert them easily to List, array or Set.

@RequestMapping(value = "/testset", method = RequestMethod.GET)
    public String testSet(@RequestParam(value = "test") Set<String> test) {

        return "success";
    }

I tested with postman like http://localhost:8080/mappings/testset?test=ABC&test=DEF

You will see set having data, [ABC, DEF]

You can create a new class that contains the map that should be populated by Spring and then use that class as a parameter of your @RequestMapping annotated method.

In your example create a new class

public static class Form {
   private Map<String, String> test;
   // getters and setters
}

Then you can use Form as a parameter in your method.

@RequestMapping(method = RequestMethod.GET)
public String testUrl(Form form) {
  // use values from form.getTest()
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!