如何在GET调用中将map作为请求参数发送

Aru*_*wda 3 java rest model-view-controller spring-boot postman

是否可以在GET调用中将map作为参数发送.我搜索,我可以找到列表和集合.但没有找到任何地图收集.

我尝试了以下,我的控制器方法看起来像这样.

@GetMapping("/test")
    public ResponseEntity<?> mapTest(@RequestParam Map<String,String> params) {

        LOG.info("inside test with map  "+  params );

        return new ResponseEntity<String>("MAP", HttpStatus.OK);
    }
Run Code Online (Sandbox Code Playgroud)

我发了邮递员的以下要求

http://localhost:8080/test?params={a:abc,b:bcd}
Run Code Online (Sandbox Code Playgroud)

一切正常,没有错误和例外.但是我收到的地图看起来像key=params , value={a:abc,b:bcd}

我希望收到的地图就像 key1="a" value1=abc ,key2="b" value2="bcd"

g00*_*00b 7

这在Spring MVC指南中有记录:

@RequestParam注释声明为Map<String, String>MultiValueMap<String, String>参数时,将使用所有请求参数填充映射.

这意味着您当前获得的响应是​​预期结果.它Map包含所有参数的列表,在您的情况下,您只有一个名为的参数param.

如果您需要自定义参数映射,则必须自己实现.由于您还没有使用JSON,因此您可能必须手动解析参数.

但是,如果您的目标是拥有动态参数图,您仍然可以使用Map<String, String>,但您必须将您的请求更改为:

http://localhost:8080/test?a=abc&b=bcd
Run Code Online (Sandbox Code Playgroud)