java - 如何在 GET 调用中将映射(键值对)作为请求参数发送

标签 java spring-boot rest model-view-controller

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

我尝试了以下, 我的 Controller 方法如下所示。

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

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

        return new ResponseEntity<String>("MAP", HttpStatus.OK);
    }

然后我从 postman 那里发送了以下请求

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

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

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

最佳答案

这记录在 Spring MVC guide 中:

When an @RequestParam annotation is declared as Map<String, String> or MultiValueMap<String, String> argument, the map is populated with all request parameters.

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

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

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

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

关于java - 如何在 GET 调用中将映射(键值对)作为请求参数发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823378/

相关文章:

java - XML 格式的背景图像

java - 缺少返回语句 : try-catch

rest - 禁止加载嵌入式 servlet

c# - WCF REST Web 服务和 HTTP header

java - 为什么 `a[i] = b; i++` 比 `a[i++] = b` 表现更好?

java - Android 2.3.3 媒体播放器出现 NullPointerException

Spring 启动应用程序-test.properties

spring - Spring Boot运行错误bootRun工作正常,但应用程序运行不正常

java - 使用 REST Api 删除 OTDS 用户 - 无法删除同步对象

java - 使 Node JS 功能同步?在查询数据库之前发送json响应