使用 swagger2 時候遇到的問題

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使用遇到的坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章