The valid characters are defined in RFC 7230 and RFC 3986 解决方案)
- 问题背景
- 问题原因
- 解决方案
- 方案一
- 方案二
- 方案三
问题背景
Java在做接口的时候,接口测试经常使用postman进行测试,在测试的时候,就会经常出现如下的问题
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:192)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)
在postman中的请求如下
问题原因
出现这类问题的原因是因为这个请求参数在中存在特殊的符号导致的,上面的案例中的{}就是特殊的字符,解决完这个特殊符合的问题之后这个问题就能解决了
解决方案
方案一
使用postman的时候,不是用param传递参数,修改使用body的form-data传输
此时在地址栏就没有这一堆参数了,可以对比第一幅图看出,这样请求的状态就是200了,问题解决,
如果提示参数找不到,就是用 x-www-form-urlencoded即可
方案二
测试的时候使用java代码测试,可以直接使用main方法,然后把这些字符串转义成字符串即可
方案三
开发的时候传递参数直接使用json在body中传输参数