为什么springfox-swagger2用户界面告诉我Unable to infer base url.
据我所知,我使用的是典型的Swagger spring-boot配置。
正如您在屏幕截图中看到的,支持UI的swagger-fox网址是 example.com/api 。注意:当我导航到https://localhost:9600/api/v2/api-docs/时,我得到一个标准的Spring Whitelabel Error Page
。我怀疑这是问题的根源?我没有看到Spring没有加载springfox-swagger2
的错误,因此我不知道为什么它不起作用。
我的配置看起来像这样(我尝试了这个配置的各种变体,从网上搜索建议):
@EnableSwagger2
@EnableWebMvc
@ComponentScan(basePackages = {"com.company.project"})
public class SwaggerConfig
{
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.cloud")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.data.rest.webmvc")))
.paths(PathSelectors.any())
.build();
}
}
和
<!-- to generate /swagger-ui.html -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
注意:有趣的是,当我尝试2.6.0版时,我没有获得模态弹出窗口,但我的Swagger UI显示0 api内容。那么,我知道模态必须是相当新的吗?
如果此处没有足够的信息,请给我留言。
答案 0 :(得分:17)
我能够通过添加带注释的SpringBootApplication来解决这个问题 - 正如Mark所建议的那样:
@EnableSwagger2
答案 1 :(得分:11)
对我来说,问题是Spring Security不允许访问swagger-ui所需的某些资源。解决方案是允许匿名访问以下路径:
就我而言,无需身份验证就可以访问这些资源。
答案 2 :(得分:2)
使用 SpringBootServletInitalizer 扩展您的主类。 它会很好。 请参考下文。
public class TestApp extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
}
}
答案 3 :(得分:2)
事实证明,我的问题的解决方案是将struct CustomColor {
let color : UIColor!
let name : String!
}
注释与Docket Bean一起移动到主Configuration类中。
我在Docket Bean的子包中创建了一个单独的类,我希望它能被Spring扫描并加载bean。也许我没有使用func dragItem(for indexPath: IndexPath) -> UIDragItem {
let color = colorDetails[indexPath.row]
let itemProvider = NSItemProvider(object: CustomColor )
let dragItem = UIDragItem(itemProvider: itemProvider)
dragItem.localObject = color
return dragItem
}
注释那个docket类,或者问题可能是其他问题,但我得到了它的工作。
答案 4 :(得分:1)
在我的情况下,我在 WebSecurityConfig.java 中有此行:
.antMatchers("swagger-ui.html").permitAll()
当我添加此内容时:
.antMatchers("/swagger-resources/**").permitAll()
我的问题解决了。
答案 5 :(得分:1)
这对我有用。
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers(
"/swagger-resources/**",
"/swagger-ui.html",
"/v2/api-docs",
"/webjars/**");
}
确定根路径。
答案 6 :(得分:0)
对于Spring 2,使用@SpringBootApplication批注并从SpringBootServletInitializer扩展您的类应用程序,然后重写SpringApplicationBuilder方法
@SpringBootApplication
public class TestApp extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TestApp.class);
}
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
}
}
答案 7 :(得分:0)
就我而言,我正在将 swagger2(2.9.2)应用程序的 springboot(2.1.2)部署为 tomcat8.5 中的war文件。 strong>并得到相同的错误。
后来我仅通过扩展此类文件AppConfig extends SpringBootServletInitializer
我完整的AppConfig文件
package org.mydomain
import java.net.URL;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication(scanBasePackages = "org.mydomain")
@EntityScan({"org.mydomain.entity"})
@EnableJpaRepositories({"org.mydomain.repository"})
@EnableSwagger2
@EnableScheduling
public class AppConfig extends SpringBootServletInitializer {
// We can optionally have spring boot way of starting main method
public static void main(String[] args) {
SpringApplication.run(AppConfig.class, args);
}
}
This is the blog I referred how to deploy springboot application into tomcat
注意:我还没有配置swagger docket,只是使用了默认实现。
答案 8 :(得分:0)
我正在使用弹簧靴。
就我而言,我在包裹名称中输入了错误。 在我的项目中,基本包名称为
org.liferayasif.documents
因此我的配置文件应位于
org.liferayasif.documents.config
config->您可以输入任何名称。
但是错误地我在下面输入了不同的包装名称
org.liferayasif.config
在我的情况下,将配置文件放入正确的程序包名称中
org.liferayasif.documents.config
然后正常工作。
答案 9 :(得分:0)
我需要在Spring Security方法中添加对资源的匿名访问: 保护无效的configure(HttpSecurity http)
.antMatchers("/api/**", "/swagger-ui.html", "/webjars/**", "/v2/**", "/swagger-resources/**").anonymous()
然后它开始工作。
答案 10 :(得分:0)
OAHH,对我而言,这是新事物。我为springfox-swagger2
和springfox-swagger-ui
之前:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
**<version>2.6.1</version>**
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
**<version>2.9.2</version>**
</dependency>
之后:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
**<version>2.9.2</version>**
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
**<version>2.9.2</version>**
</dependency>
这解决了我的问题。
答案 11 :(得分:0)
我遇到了同样的问题,但是(也许)我在pom.xml中版本不匹配
我的项目版本为:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.M5</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
然后,当我添加以下依赖项时,它开始起作用:
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
答案 12 :(得分:0)
在Springboot应用程序的主文件中添加@EnableSwagger2
批注
@SpringBootApplication
@EnableSwagger2
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
答案 13 :(得分:-1)
首先检查您的Java版本,它似乎无法与版本Java 11
配合使用,尝试使用Java 8
似乎没问题