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

时间:2018-02-16 09:11:55

标签: java rest spring-boot model-view-controller 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);
    }

我从邮递员发送了以下请求

http://localhost:8080/test?params={a:abc,b:bcd}

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

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

类似

1 个答案:

答案 0 :(得分:5)

Spring MVC guide

中记录了这一点
  

@RequestParam注释声明为Map<String, String>MultiValueMap<String, String>参数时,地图将填充所有请求参数。

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

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

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

http://localhost:8080/test?a=abc&b=bcd