Spring Redirect为何编码空格却不编码非英文字符?求相关文档
Spring Redirect 编码问题解析
现象原因
Spring的redirect:重定向机制中,编码逻辑分两部分:
- 路径部分:非英文字符默认不会自动编码,这是因为Servlet容器(如Tomcat)的URI编码配置默认为ASCII,未开启非ASCII字符的自动编码。
- 查询参数部分:空格会被自动编码为
%20,这符合URL编码规范,但非ASCII字符若未通过工具类处理,同样不会自动编码。
解决方案
- 使用
UriComponentsBuilder构建URL:这是Spring推荐的方式,会自动对路径、查询参数中的所有特殊字符(包括非ASCII字符、空格)进行标准URL编码:
String redirectUrl = UriComponentsBuilder.fromPath("/user/张三") .queryParam("nickname", "小 明") .build() .toUriString(); return "redirect:" + redirectUrl;
- 配置Servlet容器编码:以Tomcat为例,在
server.xml的Connector节点添加URIEncoding="UTF-8"和useBodyEncodingForURI="true",确保容器对路径中的非ASCII字符进行编码解析。 - 使用
RedirectView时开启编码:若使用RedirectView类,可调用setUrlEncode(true)方法启用自动编码(注意适配Spring版本)。
参考文档
可查阅Spring Framework官方文档中「Spring MVC 重定向与URL构建」相关章节,了解更详细的编码规则与配置方式。
内容的提问来源于stack exchange,提问作者hoondal2
相关产品推荐
相关产品推荐

