Spring Boot 集成Swagger中的坑

目录

一、访问swagger-ui.hyml页面出错

1.1 情况1

1.2 情况2

二、无法加载swagger-ui.html页面中的静态资源

三、出现弹窗,无法访问

四、总结


一、访问swagger-ui.hyml页面出错

1.1 情况1

 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:428) ~[tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684) ~[tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]

2018-10-28 16:32:04.295  INFO 96428 --- [nio-8089-exec-9] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:428) ~[tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684) ~[tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.32.jar:8.5.32]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]

请求头的问题,不要用https访问,用http。

1.2 情况2

返回401,未授权。因为订单服务配置了拦截器,来获取用户信息,所以会拦截所有访问该端口的请求,当访问swagger-ui时直接将请求发送到了controller中,导致访问失败。

具体看拦截器配置:

拦截所有根目录下的请求,根据网关的配置可以得到,访问订单微服务的url为:http://api.leyou.com/api/order/

所以此时如果访问swagger-ui时,使用的路径为:http://localhost:8089/swagger-ui.html ,这里面的前半部分:http://localhost:8089就相当于http://api.leyou.com/api/order/(通过nginx反向代理),所以为了区分访问路径,在网关配置中就不指定order前缀了,将其放在controller中进行配置。

这样配置完成后,进入controller时就必须带前缀order了,但是此时访问还是会造成401错误,因为配置了拦截器,访问根目录下的所有路径都会进行用户是否登录的检测,所以在拦截器中将访问swagger-ui的路径过滤掉:

再次访问http://localhost:8089/swagger-ui.html就不会被转发到controller中引发401错误了。

注意,引发401错误的可能还注解:@EnableWebMvc。

后期在处理Long类型数据以json形式返回时的问题,会配置一个转换器,要用到这个注解。在进行接口测试时将其注释掉。

二、无法加载swagger-ui.html页面中的静态资源

通过第一步的修改后,可以访问页面,但是页面空白。

打开控制台,刷新页面:

发现静态资源无法加载,同样,还是因为拦截器的原因。

具体查看静态资源,会发现它们都在一个webjars的路径下,那么直接过滤掉这个路径即可:

效果:

静态资源都加载成功,但是又有新的问题

三、出现弹窗,无法访问

点击发生错误的请求:

发现产生这个问题的原因是无法加载swagger的资源文件,还是因为拦截器的问题,那么过滤掉即可:

最后结果:

四、总结

无法访问swagger-ui最主要的原因都是拦截器的问题(如果配置了的话)

拦截器代码:

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        List<String> excludePath = new ArrayList<>();
        excludePath.add("/swagger-ui.html");
        excludePath.add("/swagger-resources/**");
        excludePath.add("/webjars/**");
        
        registry.addInterceptor(loginInterceptor())
                .addPathPatterns("/**").excludePathPatterns(excludePath);
    }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值