Spring 将空映射 {} 传递到 GET 请求时 MVC 端点未获取

Spring MVC Endpoint not fetch while pass empty map {} into GET Request

面对端点获取问题

下面是我调用 api 得到响应时的情况。

http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD

但是当我设置以下数据时它不起作用任何人都可以帮助我解决这个问题。

http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}

@RequestMapping(value = "/apps/{appId_}/users/{username_}", method = RequestMethod.GET)
@ResponseBody
@Transactional
public UserResponseDTO getUserAndToken(@PathVariable Long appId_, @PathVariable String username_, @RequestParam("password") String password_, @RequestParam("data") String datas) throws Exception {
//do stuff
}

编辑

任何编辑的这个问题在 Tomcat 版本 7.0.63 中有效,而另一个版本 7.0.73, 8.0.x + 不工作。

您忘记在 value = "/apps/users/{username_}"

中指定 {appId_}

修复:value = "/apps/{appId_}/users/{username_}"

~~~

您的方法接受 @RequestParam("data") String datas 你正在发送 data={} 字符串应该被引用所以修复是 data=""

这种行为影响 Tomcat

的主要更新

为了快速修复,您可以降级到旧版本之一,我用 7.0.63 降级了 tomcat。

在对 Spring MVC 进行更多研发后,拒绝请求,同时将无效字符列表添加到下面列出的请求中。

URI 语法中不允许的排除的 US-ASCII 字符:

   control     = <US-ASCII coded characters 00-1F and 7F hexadecimal>
   space       = <US-ASCII coded character 20 hexadecimal>
   delims      = "<" | ">" | "#" | "%" | <">

不明智的字符列表是允许的,但可能会导致问题:

unwise      = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"

以下字符在查询组件中保留,在 URI/URL 中具有特殊含义:

  reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

For more information visit.

解决方案:

encodeURI("http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data={}")
> http://localhost:28080/restServices/apps/1762/users/USERNAME/?password=PASSWORD&data=%7B%7D