1

我有一个以下项目结构

在此处输入图像描述

项目产品和 API 网关共享公共项目。由于在父项目settings.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/**

但是当我访问 URL

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.StaticResourceResolverpublic URL findResource(String name)BuiltinClassLoader.java 中的返回 null

在此处输入图像描述

4

3 回答 3

1

不确定您是否这样做,但您可能需要使用 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()
于 2020-10-19T10:25:12.880 回答
0

enabled文档说flag的默认值为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/**
于 2021-03-09T07:44:43.257 回答
0

解决方案是包含每个项目的 setting.gradle 文件,但是在 Intellj 上,如果您导航到 Gradle 任务并运行构建,它会给您一个错误,或者如果您运行 gradle run 它会给您一个错误

于 2020-11-03T09:04:03.537 回答