Swagger是一个强大的API文档工具,可以帮助开发者设计、构建、记录和使用RESTful Web服务。在Linux环境下将Swagger与Spring Boot结合使用,可以方便地生成和测试API文档。
在Spring Boot项目的pom.xml
中添加Swagger相关依赖:
<!-- Swagger 2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
或者使用Swagger 3(推荐):
<!-- Swagger 3 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
创建一个配置类SwaggerConfig.java
:
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 SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
对于Swagger 3:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI springShopOpenAPI() {
return new OpenAPI()
.info(new Info().title("Spring Boot API")
.description("Spring Boot application")
.version("v1.0.0"));
}
}
在Controller类和方法上添加Swagger注解:
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
@Api(value = "用户管理", tags = "用户管理接口")
public class UserController {
@GetMapping("/users/{id}")
@ApiOperation(value = "获取用户信息", notes = "根据用户ID获取用户详细信息")
public User getUser(@PathVariable Long id) {
// 实现代码
}
@PostMapping("/users")
@ApiOperation(value = "创建用户", notes = "创建新用户")
public User createUser(@RequestBody User user) {
// 实现代码
}
}
在生产环境中,你可能希望禁用Swagger UI:
# application.properties
springfox.documentation.swagger-ui.enabled=false
或者根据环境变量动态配置:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${swagger.enabled:false}")
private boolean swaggerEnabled;
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(swaggerEnabled)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
在Linux生产环境中,确保Swagger端点受到保护:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/swagger-ui/**", "/v3/api-docs/**").hasRole("ADMIN")
// 其他安全配置
.and()
.httpBasic();
}
}
启动Spring Boot应用后,可以通过以下URL访问Swagger UI:
http://<your-server-ip>:<port>/swagger-ui.html
http://<your-server-ip>:<port>/swagger-ui/
如果访问Swagger UI时出现404错误:
如果前端与API不在同一域名下,配置CORS:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
对于大型API,可以限制扫描的包路径:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.your.package"))
.paths(PathSelectors.any())
.build();
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.securitySchemes(Arrays.asList(apiKey()))
.securityContexts(Arrays.asList(securityContext()))
// 其他配置
.build();
}
private ApiKey apiKey() {
return new ApiKey("JWT", "Authorization", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.any())
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("JWT", authorizationScopes));
}
可以下载Swagger UI资源并自定义:
src/main/resources/static/swagger-ui
在Linux环境下集成Swagger与Spring Boot可以大大提升API开发效率,方便团队协作和前后端对接。通过合理配置,可以在开发环境中充分利用Swagger的强大功能,同时确保生产环境的安全性。