带有地图的 RequestParam 不必要地绑定了 GET 请求中的其他请求参数

时间:2021-03-15 11:21:28

标签: spring spring-boot spring-mvc controller request-mapping

我有一个这样的 GET 请求:-

    @GetMapping(value = "/foo")
          public Model getSomething(
          @RequestParam(value = "a", required = true) String a,
          @RequestParam(value = "b") String b,
          @RequestParam(value = "c") int c,
          @RequestParam Map<String, String> map) { 

}

问题是当我发出 get 请求 a,b,c 被包含在地图中时。 我使用过这样的映射:-

/foo?a=A&b=B&c=100&key1=value1&key2=value2

目前正在发生的是 map 具有所有请求参数值。例如

a-"a"

b-"b"

c-100

key1-value1

key2-value2

要求是只有 key1 和 key2 作为键的映射。 我只想使用 map 来提取 key1 和 key2。 这是如何实现的。

1 个答案:

答案 0 :(得分:0)

如评论中所述,您不能排除 @RequestParam 地图的参数。

您的客户是否可以选择将那些带有正文的参数作为 json 对象而不是请求参数发送?请求正文通常不会在 GET 请求中发送,但您可以这样做。然后您将 @RequestParam<String, String> map) 更改为 @RequestBody Map<String, String> map)