一段代码完美解决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;
    }
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值