解决 springboot 2.6.6 版本中内嵌 tomcat 9.0.60 版本 严格执行RFC 3986规范,导致在 GET 请求中出现保留字符请求错误的问题。

发布时间 2023-10-12 14:30:15作者: Ron丶罗恩

项目中get请求:http://domain:port/api/module/function/getList?pageNum=1&pageSize=1000&keyWord=[]&id=;

keyWord的参数应该是 keyWord="[]",如果不加双引号,keyWord就变成了数组,后台接口就报错了。

调查原因:springboot 2.6.6 版本中内嵌 tomcat 9.0.60 版本 严格执行RFC 3986规范, "[]" 是规范的保留字。

处理方法:

/**
 * Project : 
 * Version : 1.01
 * Date : 2023/7/26 星期三 14:11
 *
 * @Author: chenxy
 * Modification history :
 * 解决 springboot 2.6.6 版本中内嵌 tomcat 9.0.60 版本 严格执行RFC 3986规范,导致在 GET 请求中出现保留字符请求错误的问题。
 **/
@Configuration
public class TomcatConfig {
    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
        });
        return factory;
    }
}