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;
}