springboot 在get请求传json字符串出现出现报错

在springboot2.2.11启动项目在写请求获取信息接口入参是json格式的报错了,
结果发现是新的springboot做了调整导致这个报错

接口

@GetMapping("/getComponentListByComponentLibraryId")
    public ApiResult getComponentListByComponentLibraryId(@RequestParam("searchObject") String searchObject) {
        ComponentVo auditTaskRequest = JSON.parseObject(searchObject, ComponentVo.class);
        List<Component> companyTreeResponseDtoList =componentService.findComponentListByComponentLibraryId(auditTaskRequest);
        return success(new PageInfo<>(companyTreeResponseDtoList));
    }

报错如下:

java.lang.IllegalArgumentException: Invalid character found in the request target [/web/component/getComponentListByComponentLibraryId?searchObject={%22pageSize%22:10,%22pageNum%22:10,%22componentLibraryId%22:1,%22componentName%22:%22%22}]. The valid characters are defined in RFC 7230 and RFC 3986
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:490) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.39.jar:9.0.39]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.39.jar:9.0.39]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-embed-core-9.0.39.jar:9.0.39]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.39.jar:9.0.39]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_241]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_241]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.39.jar:9.0.39]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_241]

解决方案:
在项目的启动类里面加上如下代码解决:

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

版权声明:本文为bruce_gl原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。