我有以下项目结构
项目产品和API网关共享公共项目。由于在父项目设置中。Gradle 我已包含该项目,如下所示
rootProject.name = 'src'
include 'common', 'fetebird-apigateway', 'fete-bird-product'
在 API 网关 build.gradle 中,我包含了以下依赖项
dependencies {
annotationProcessor("io.micronaut.openapi:micronaut-openapi:2.1.1")
implementation("io.swagger.core.v3:swagger-annotations")
implementation project(':common')
}
在产品 build.gradle 中,我包含以下依赖项
dependencies {
annotationProcessor("io.micronaut.openapi:micronaut-openapi:2.1.1")
implementation("io.swagger.core.v3:swagger-annotations")
implementation project(':common')
}
当我运行命令时
$ gradle build
我可以看到视图已生成
招摇暴露终点
micronaut:
application:
name: feteBirdProduct
server:
port: 8083
router:
versioning:
enabled: true
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: /swagger/**
swagger-ui:
paths: classpath:META-INF/swagger/views/swagger-ui
mapping: /swagger-ui/**
但是当我访问该网址时
http://localhost:8084/swagger-ui/index.html
我可以看到以下消息,但我没有启用任何安全功能
{"message":"Page Not Found","_links":{"self":{"href":"/swagger-ui/index.html","templated":false}}}
调试时
io.micronaut.web.router.resource.StaticResourceResolver
。在BuiltinClassLoader.java中public URL findResource(String name)
返回null
不确定您是否这样做了,但您可能需要使用 YML 配置将生成的 API 文档公开为静态资源,例如 Micronaut OpenAPI 文档中所述:
micronaut:
router:
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: /swagger/**
然后您应该能够使用以下路线访问它们:
http://localhost:8080/swagger/views/swagger-ui/index.html
。
如果启用安全模块,您可能需要使用“拦截 URL 映射”为该 URL 指定安全规则,否则您可能无法访问它:
micronaut:
security:
intercept-url-map:
- pattern: /swagger/**
http-method: GET
access:
- isAnonymous()
解决方案是包含每个项目的setting.gradle文件,但是在Intellj上,如果您导航到Gradle任务并运行构建,它会给您一个错误,或者如果您运行gradle run它会给您一个错误
文档说
enabled
标志的默认值是 true 但由于某种原因,我必须显式设置 这个值 来显示 swagger ui。
micronaut:
router:
static-resources:
swagger:
enabled: true # docs says this is already the default value
paths: classpath:META-INF/swagger
mapping: /swagger/**
swagger-ui:
enabled: true # but this only works if it is explicitly set
paths: classpath:META-INF/swagger/views/swagger-ui
mapping: /swagger-ui/**
如果您找不到页面,则意味着未生成视图。