1. 程式人生 > 其它 >springboot-The valid characters are defined in RFC 7230 and RFC 3986

springboot-The valid characters are defined in RFC 7230 and RFC 3986

技術標籤:bugjava

環境 springboot 自帶tomcat

報錯資訊 :

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

postman get 請求資訊

解決方案一:

package com.ford.dsl.config;

import org.apache.catalina.connector.Connector;
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;

@Configuration
public class TomcatConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                connector.setProperty("relaxedQueryChars", "|{}[]");
            }
        });
        return factory;
    }
}

解決方式二 :conf/catalina.properties中最後新增2行:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

重啟tomcat ...

jsp參考

另一種方式

就是發請求前,進行URLEncoder.encode(requestURI,"UTF-8");

然後在後臺接收請求後decode()
String params = request.getParameter(PARAMS);

params = URLDecoder.decode(params,"UTF-8");