一段代码完美解决SpringBoot中Tomcat出现的RFC 7230和RFC 3986错误

springboot中接口调用控制台报错信息如下:

java.lang.IllegalArgumentException: Invalid character found in the request target.
The valid characters are defined in RFC 7230 and RFC 3986

这是因为高版本的Tomcat增加了特殊字符限制,所以会认为你的URL里某些字符不合法,代码本身没有错。

解决办法如下:

注:我使用的 springboot 版本是 2.0.9

在Application启动类里面添加以下代码(当然也可以添加在一个@Configuration注解的类里):

@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
    
    
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]"));
        return factory;
}

在这里插入图片描述
因为springboot内置Tomcat,这样就等于修改了它的配置,解除字符限制,并且亲测可行,不用改其它东西。

附加:

如果你的springboot版本与我的相差太多,如1.X,如果上面的无效,可以试试改用下面这段:

@Bean
public EmbeddedServletContainerFactory webServerFactory() {
    
    
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]"));
        return factory;
    }

猜你喜欢

转载自blog.csdn.net/qq_36737803/article/details/103780169