原因:springboot内置tomcat版本严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范规定的Url中不包含{}|
解决方案:有两种方法解决
方法一:添加配置类,代码如下(本人亲测有效)
package com.welb.config;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
1. @author cq
2. @title: TomcatConfig
3. @projectName springBootDemo
4. @description: tomcat特殊字符处理问题
5. @date 2020/5/5 21:06
*/
@Configuration
public class TomcatConfig {
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
//允许的特殊字符
connector.setProperty("relaxedQueryChars", "|{}[]");
});
return factory;
}
}
方法二:更改springboot内置的Tomcat版本(未测试,如果您尝试,请在评论区发表您的结果,以供大家学习)
步骤1. 查看使用的org.springframework.boot版本
如图所示,我的版本为2.2.6
打开本地maven repository目录下的spring-boot-dependencies文件:
D:\repository\org\springframework\boot\spring-boot-dependencies\2.2.6.RELEASE\spring-boot-dependencies-2.2.6.RELEASE.pom
可以在标签下面找到<tomcat.version>8.5.20</tomcat.version>
推测!!!修改此处tomcat版本恢复到低版本,例如:8.0.32版本即可修改URL传特殊字符问题,方法一本人亲测有效,方法二未测试。
————————————————
版权声明:本文为优快云博主「johnny233」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/lonelymanontheway/article/details/79562512