我有一个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
参数?
暂无答案!
目前还没有任何答案,快来回答吧!