Spring Boot应用中如何在查询参数中使用|管道运算符
在Spring Boot中正确传递|管道运算符作为查询参数值
方案1:前端对|进行URL编码
管道符|的标准URL编码值是%7C,请求时直接将参数中的|替换为%7C即可。例如:
原本的请求:
GET /api/data?filter=a|b
修改为编码后的请求:
GET /api/data?filter=a%7Cb
后端接收参数时会自动解码为a|b,无需额外处理逻辑。
方案2:后端配置允许管道符通过Tomcat校验
如果无法修改前端请求逻辑,或有特殊场景需要直接传递|,可以通过配置Tomcat放宽对查询字符的限制:
方式A:通过配置文件修改
在application.properties中添加:
server.tomcat.relaxed-query-chars=| # 若路径中也需要使用|,再添加以下配置 # server.tomcat.relaxed-path-chars=|
或在application.yml中配置:
server: tomcat: relaxed-query-chars: "|" # relaxed-path-chars: "|"
方式B:自定义Tomcat连接器(适用于复杂配置场景)
创建配置类,手动设置Tomcat允许的查询字符:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatConfig { @Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() { return factory -> { factory.addConnectorCustomizers(connector -> { // 允许|作为查询参数字符 connector.setAttribute("relaxedQueryChars", "|"); }); }; } }
注意事项
- 优先采用URL编码方案,这是HTTP协议的标准处理方式,能避免潜在的安全风险(如注入攻击)。
- 后端放宽字符限制仅在必要时使用,不要随意将大量特殊字符加入允许列表。
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

