使用 swagger2 时候遇到的问题

本文解决Swagger2在SpringBoot项目中启动时的常见错误,包括无法推断baseUrl的问题和前端正常但后端报错的情况。提供了解决方案,如更新Swagger2版本、调整SpringSecurity配置、确保@EnableSwagger2正确应用,以及解决模板解析错误。
摘要由CSDN通过智能技术生成

1. 启动swagger 报错 Unable to infer base url. This is common when using dynamic…

Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. 
The base url is the root of where all the swagger resources are served.
 For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/.
  Please enter the location manually:

swagger 2.7 及之前的版本好像不会出现这种问题.

原因可能 :
  • Swagger2 版本 落后与 身份验证版本 (SpringSecurity),更新到Springfox 2.8.0后,/swagger-resources/**路由不会被Authorization标头调用
    • 解决方法
    在身份认证(SpringSecurity)的时候添加 
    .antMatchers("/swagger-resources/**").permitAll()
    
  • 被类似shiro的权限控制组件拦截
    • 解决方法
    过滤swagger页面的权限控制
     /swagger-ui.html
     /webjars/**
     /swagger-resources/**
     /v2/**
    
  • 没有增加@EnableSwagger2 启用swagger的配置
    • 解决方法
    SwaggerConfig 上增加 @EnableSwagger2 ,启用swagger的配置
    
  • 以上信息都配置,仍然报错。经测试:@EnableSwagger2 配置更换到启动类上可正常访问
    说明这不是肯定不是根本原因。比对配置文件发现SwaggerConfig类上的注解
    @ConditionalOnProperty(prefix = “xxx”, name = “yyy”, havingValue = “true”)被修改
    @ConditionalOnProperty注解控制此类上的其他注解是否生效
    • 解决方法
    修改配置文件中的xxx.yyy和配置文件(配置中心)的一致
    
2. 项目启动正常,进入swagger 界面前端正常,但是后端报错
2020-03-06 18:25:30.353 ERROR 3012 --- [nio-8080-exec-5] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-5] Exception processing template "login": Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers
	at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
	......
	at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:189) [thymeleaf-spring5-3.0.11.RELEASE.jar:3.0.11.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	......
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) [tomcat-embed-core-9.0.31.jar:9.0.31]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.31.jar:9.0.31]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.31.jar:9.0.31]
	......
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31]
	......
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181]
	......
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.31.jar:9.0.31]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

2020-03-06 18:25:30.356 ERROR 3012 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers
	at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
	......
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.31.jar:9.0.31]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
原因 :

Swagger2 版本 与 sprinboot 项目版本不适配,springboot 项目版本为 2.2.5 , Swagger2 版本为 2.9.2

解决方法 :
将 Swagger2 版本降为 2.8.0

参考:swagger2使用遇到的坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God__is__a__girl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值