我尝试将我的Spring Boot版本2.0.1.RELEASE
与Swagger集成。
从这个blog post看起来,通过添加两个Maven依赖项似乎很容易,一切都应该有效。
所以我将以下依赖项添加到pom:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
创建了SwaggerConfig
bean:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
return docket;
}
}
在属性文件中,我在尝试使其工作的过程中最终得到了这3个条目:
spring.application.name=cat-service
management.server.servlet.context-path=/cat-service
server.servlet.contextPath=/cat-service
但最后,访问时
http://localhost:8080/cat-service/api/v2/api-docs
或
的用户界面页面 http://localhost:8080/cat-service/swagger-ui.html
我收到page not found
错误。
我找到了this issues in the swagger github page和this question in stackoverflow,但我无法更改404
错误。
答案 0 :(得分:9)
请检查参考:https://springfox.github.io/springfox/docs/current/
“2.1.3. 从现有 2.x 版本迁移”
您可以从 pom.xml 中删除 springfox-swagger2 和 springfox-swagger-ui,并添加 springfox-boot-starter(例如 3.0.0 版)。您也可以删除@EnableSwagger2 注释
并且:“swagger-ui 位置已从 http://host/context-path/swagger-ui.html 移动到 http://host/context-path/swagger-ui/index.html 或 http:/简称为 /host/context-path/swagger-ui/。这使得将其作为 Web jar 提取并在不需要时使用配置属性将其关闭时效果更好。”
答案 1 :(得分:5)
我能够使其与Spring Boot版本2.0.4.RELEASE
和this blog post一起使用:
我添加了以下依赖项:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
此配置文件:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SpringFoxConfig {
@Bean
public Docket apiDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
它奏效了。
答案 2 :(得分:2)
我也遇到了同样的问题(404 Not Found with springfox 3.0.0)。通过将日志记录级别设置为“DEBUG”,我能够看到 /v3/api-docs
的端点并且它们工作正常,但没有关于“swagger-ui”的任何内容。
我终于找到了https://github.com/springfox/springfox/issues/3285,这表明:
<块引用>3.0.0 中的新 url 是 /swagger-ui/index.html 或 /swagger-ui/ 而不是 /swagger-ui.html"
他们是否可以不添加调试日志来指示 swagger UI 可用的位置?
答案 3 :(得分:1)
对于 Spring Boot,只需使用下面的依赖项,它就可以处理 URL /swagger-ui/
(尾部斜杠是必需的)。
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
在尝试之前,我尝试使用 swagger2 和 swagger-ui 的经典依赖项,但建议的 URL 均无效。
答案 4 :(得分:0)
答案 5 :(得分:0)
首先将SwaggerConfig.java文件添加到与springboot文件相同的软件包中。
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
尝试一下 {http://localhost:8080/spring-security-rest/api/swagger-ui.html} 要么 {{http://localhost:8080/spring-security-rest/swagger-ui.html}
如果不起作用,那么请尝试更改application.properties中的路径
将此文件添加到您的文件中
server.servlet-path=/my-service
并尝试这个 http://localhost:8080/my-service/swagger-ui.html(UI文件)
答案 6 :(得分:0)
如果将Spring Boot升级到2+,请不要忘记将server.contextPath
更改为server.servlet.contextPath
。
答案 7 :(得分:0)
解决方案:您只需要从配置类中删除 @EnableWebMvc 。
说明: @EnableWebMvc 打开类 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport 。在spring-boot中,有一个自动配置类 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration ,其注释为 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)。
最终结果:通过将 @EnableWebMvc 添加到项目中,由于我们关闭了spring-boot自动配置,因此我们自己对一切负责。
答案 8 :(得分:0)
面对同样的问题,只是通过更改依赖关系解决了 请参阅https://www.vojtechruzicka.com/documenting-spring-boot-rest-api-swagger-springfox/
编译“ io.springfox:springfox-swagger2:2.9.2”
以前正在使用-无法正常工作
编译组:“ io.springfox”,名称:“ springfox-swagger2”,版本:“ 3.0.0”
答案 9 :(得分:0)
在 application.properties
中添加以下行后,它开始工作
spring.web.resources.static-locations: classpath:/webapp/
但我不知道为什么我们必须添加这个。 添加我认为可能相关的代码。依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- Swagger Dependencies -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
主类为
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableSwagger2
public class ProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.ghsatpute.proxy"))
.paths(PathSelectors.any())
.build();
}
}
答案 10 :(得分:0)
如果它可以帮助某人,请添加它。这个网址对我有用
http://localhost:8003/v2/api-docs
对于 swagger-ui,这个 url 开箱即用:
http://localhost:8003/swagger-ui.html
检查您是否使用正确配置的 url 来获取 swagger 规范。像 http://localhost:8080/spring-security-rest/api/swagger-ui/
没有用,我一直收到 404。
答案 11 :(得分:0)
只需使用 springdoc-openapi-ui 代替。
依赖:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.9</version>
</dependency>
然后对于 UI 只需转到:
对于 Json 去:
对于 yaml:
这就是它的全部内容......不需要注释/配置。干杯!
如果您正在使用 spring security,请确保您可以访问这些路径以使其正常工作:
欲了解更多信息: https://www.baeldung.com/spring-rest-openapi-documentation
答案 12 :(得分:0)
以下是在 Spring Boot 应用程序中启用 swagger 的步骤:
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).groupName("group-name").apiInfo(apiInfo()).select().paths(predicate()).build();
}
private Predicate<String> predicate() {
return or(regex("/api/v1.*"), regex("/api/v2.*"));
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("The title of the your choice")
.contact("your@email.com").license("Licence name ").version("1.0").build();
}
答案 13 :(得分:-1)
这对我有用,我使用WebMvcConfigurer而不是WebMvcConfigurerAdapter,因为该类已被弃用。
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.illary.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(metaData());
}
private ApiInfo metaData() {
return new ApiInfoBuilder()
.title("Spring Boot Swagger App")
.description("\"Spring Boot Swagger Server App\"")
.version("1.0.0")
.license("Apache License Version 2.0")
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0\"")
.build();
}
public ApiInfo apiInfo() {
final ApiInfoBuilder builder = new ApiInfoBuilder();
builder.title("Swagger Test App").version("1.0").license("(C) Copyright Test")
.description("The API provides a platform to query build test swagger api");
return builder.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
答案 14 :(得分:-2)
在删除@EnableWebMvc