先说结论
Swagger2测试
使用@RequestBody注解,接收JSON数据时
请求方式依然是GET请求
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
-
在请求目标中发现无效字符
1. 解决思路
写了个接口,然后出现上面情况,百度了一下说问题出在高版本Tomcat中会不识别{}括号。
随便抄了个方法,跑一下,可行,不报错了。
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
2. 实际办法
可是越想越不对,Swagger2也使用了好多次,从来没有遇到过这个问题啊!再检查一下, 发现POST方法,httpMethod,写成了GET。这也就解释了,为什么在测试时候报错了,方法中需要接口JSON,增加了@RequestBody,入参需要是JSON,请求方式依然是GET请求。所以提示找不到JSON的{}了问题,修改成httpMethod = "POST"后,删除上面配置的TomcatConfig后,重试,问题解除。
@ApiOperation(value = "xxx",notes = "xxx",httpMethod = "GET")
@PostMapping("/doLogin")