springweb请求参数双重编码

jq6vz3qz  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(216)

我有一个spring restcontroller端点,定义如下:

@GetMapping("/stuff")
public void doStuff(HttpServletRequest request) {
    String dateStr = request.getParameter("date");
    logger.debug(dateStr);
}

假设我向该端点发出请求:

GET /stuff?date=2021-02-23%2016:21:37

价值 dateStr 那么 2021-02-23 16:21:37 . 这是预期的行为。url被解码,并且 %20 替换为空格。
但是假设我将请求中的空间双重编码到这个端点(注意 %2520 这里,与 %20 在第一个请求中):

GET /stuff?date=2021-02-23%252016:21:37

价值 dateStr 仍然是 2021-02-23 16:21:37 . 为什么?spring是如何对这个请求参数进行双重编码的?
假设我重写了endpoint方法,使其如下所示:

@GetMapping("/stuff")
public void doStuff(@RequestParam("date") String dateStr) {
    logger.debug(dateStr);
}

如果我使用 %20 如上所述,它按预期工作。
如果我使用 %2520 如上所述 dateStr 是现在 2021-02-23%2016:21:37 . 这就是我所期望的。但是,为什么行为与使用 HttpServletRequest 参数?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题