春季MVC填充@RequestParam地图<字符串,字符串>

我在春季MVC@Controller中有以下方法:

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

我这样称呼它:

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

但是,“测试”请求参数变量始终为空

我必须做什么才能填充“test”变量?


答案 1

详见此处 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

如果方法参数为 Map 或 MultiValueMap,并且未指定参数名称,则 map 参数将填充所有请求参数名称和值。

所以你会像这样改变你的定义。

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

在您的参数中,如果您调用了url http://myUrl?A=ABC&B=DEF

你会在你的方法

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

答案 2

您可以创建一个包含应由 Spring 填充的映射的新类,然后将该类用作带批注方法的参数。@RequestMapping

在示例中,创建一个新类

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

然后,您可以在方法中用作参数。Form

@RequestMapping(method = RequestMethod.GET)
public String testUrl(Form form) {
  // use values from form.getTest()
}