SpringDocConfig.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.lingyue.config;
  2. import io.swagger.v3.oas.models.OpenAPI;
  3. import io.swagger.v3.oas.models.info.Contact;
  4. import io.swagger.v3.oas.models.info.Info;
  5. import org.springdoc.core.models.GroupedOpenApi;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.Profile;
  11. /**
  12. * SpringDoc OpenAPI 配置
  13. * ⚠️ 仅在 dev 环境启用(双重保障机制)
  14. *
  15. * @author lingyue
  16. */
  17. @Configuration
  18. @Profile("dev") // 第一层保障:只在 dev profile 时加载
  19. @ConditionalOnProperty(
  20. name = "springdoc.api-docs.enabled",
  21. havingValue = "true",
  22. matchIfMissing = false // 第二层保障:必须明确启用
  23. )
  24. public class SpringDocConfig {
  25. @Autowired
  26. private AppConfig appConfig;
  27. /**
  28. * 自定义 OpenAPI 信息
  29. */
  30. @Bean
  31. public OpenAPI customOpenAPI() {
  32. return new OpenAPI()
  33. .info(new Info()
  34. .title("灵越智报 API 文档")
  35. .description("灵越智报 v2.0 - 智能文档处理平台 API 接口文档<br/>" +
  36. "版本: " + appConfig.getVersion() + "<br/>" +
  37. "版权所有 © " + appConfig.getCopyrightYear())
  38. .version(appConfig.getVersion())
  39. .contact(new Contact()
  40. .name(appConfig.getName())
  41. .email("")))
  42. ;
  43. }
  44. /**
  45. * 认证服务 API 分组
  46. */
  47. @Bean
  48. public GroupedOpenApi authApi() {
  49. return GroupedOpenApi.builder()
  50. .group("auth-api")
  51. .displayName("认证服务 API")
  52. .pathsToMatch("/auth/**")
  53. .build();
  54. }
  55. /**
  56. * 文档管理 API 分组
  57. */
  58. @Bean
  59. public GroupedOpenApi documentApi() {
  60. return GroupedOpenApi.builder()
  61. .group("document-api")
  62. .displayName("文档管理 API")
  63. .pathsToMatch("/documents/**")
  64. .build();
  65. }
  66. /**
  67. * 解析服务 API 分组
  68. */
  69. @Bean
  70. public GroupedOpenApi parseApi() {
  71. return GroupedOpenApi.builder()
  72. .group("parse-api")
  73. .displayName("解析服务 API")
  74. .pathsToMatch("/parse/**")
  75. .build();
  76. }
  77. /**
  78. * AI处理服务 API 分组
  79. */
  80. @Bean
  81. public GroupedOpenApi aiApi() {
  82. return GroupedOpenApi.builder()
  83. .group("ai-api")
  84. .displayName("AI处理服务 API")
  85. .pathsToMatch("/ai/**")
  86. .build();
  87. }
  88. /**
  89. * 关系网络服务 API 分组
  90. */
  91. @Bean
  92. public GroupedOpenApi graphApi() {
  93. return GroupedOpenApi.builder()
  94. .group("graph-api")
  95. .displayName("关系网络服务 API")
  96. .pathsToMatch("/graphs/**")
  97. .build();
  98. }
  99. }