Swagger for Micronaut 与 Maven

2024-05-18

我想从 Spring Boot 2 切换到 Micronaut 框架。而且我在 Swagger 设置上遇到了困难。

在 Spring Boot 2 项目中,我有以下依赖项:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
    </dependency>

和 SwaggerConfig.class:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket swagger() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(getApiInfo())
            .select()
            .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
            .paths(PathSelectors.any())
            .build();
    }

    private ApiInfo getApiInfo() {
        return new ApiInfo("test",
            "",
            "",
            "",
            new Contact("", "https://test.test", ""),
            "",
            "");
    }
}

它可以完美地启动 swagger-ui 以及 Spring Boot 2 应用程序。

我应该向 Maven 添加哪些依赖项以及应该创建哪些类才能为 Micronaut 项目获得相同的结果?


假设应用程序已创建,请将以下内容添加到 pom.xml 中

<dependency>
  <groupId>io.swagger.core.v3</groupId>
  <artifactId>swagger-annotations</artifactId>
  <version>${swagger.version}</version>
  <scope>compile</scope>
</dependency>

其中属性 swagger.version 设置为 2.0.3

将以下内容添加到maven-compiler-plugin中的annotationProcessorPaths中

<path>
  <groupId>io.micronaut.configuration</groupId>
  <artifactId>micronaut-openapi</artifactId>
  <version>${micronaut.version}</version>
</path>

然后将以下内容添加到您的 micronaut 路由器部分。

micronaut:
    router:
        static-resources:
            swagger:
                paths: classpath:META-INF/swagger
                mapping: ${application.api.swagger.path}/**

如果您使用下面的配置,这将公开编译过程中生成的 swagger/oas yml 文件。您当然可以更改${application.api.swagger.path}就只是/api-docs/swagger或者你喜欢的东西。
如文档中所述,您还可以执行以下操作--features=swagger-java在最初创建项目时添加上述依赖项。

如果您想从应用程序本身呈现 api 规范,那么您需要添加更多代码。下面的示例可能比需要的更加充实,但就我的目的而言,该应用程序充当 swagger/oas 规范的中央渲染器。

首先为您的 swagger 需求添加一个控制器,并用@Hidden以确保它不会被注释处理器处理。

@Hidden
@Controller("/api")
public class SwaggerController {

    @Inject
    SwaggerConfig config;

    @View("swagger/index")
    @Get
    public SwaggerConfig index() {
        return config;
    }
}

然后添加以下配置类,它绑定下面的属性

@ConfigurationProperties(SwaggerConfig.PREFIX)
public class SwaggerConfig {

    public static final String PREFIX = "application.api.swagger";

    private String version;
    private String layout;
    private boolean deepLinking;
    private List<URIConfig> urls;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getLayout() {
        return layout;
    }

    public void setLayout(String layout) {
        this.layout = layout;
    }

    public boolean isDeepLinking() {
        return deepLinking;
    }

    public void setDeepLinking(boolean deepLinking) {
        this.deepLinking = deepLinking;
    }

    public List<URIConfig> getUrls() {
        return urls;
    }

    public void setUrls(List<URIConfig> urls) {
        this.urls = urls;
    }


    @ConfigurationProperties(URIConfig.PREFIX)
    public static class URIConfig {

        static final String PREFIX = "urls";

        private String name;
        private String url;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }

}

上面的配置类绑定了 application.yml 中的以下配置,但需要放置在 micronaut 特定配置之前。

application:
    api:
        swagger:
            path: /api-docs/swagger
            version: 3.19.4
            layout: StandaloneLayout
            deepLinking: true
            urls:
            - name: ubw-rest
              url: /api-docs/swagger/ubw-rest-0.1.yml

完成后,将以下把手/胡子依赖项添加到 pom

<dependency>
  <groupId>com.github.jknack</groupId>
  <artifactId>handlebars</artifactId>
  <version>4.1.0</version>
  <scope>runtime</scope>
</dependency>

在 resources 文件夹下,创建一个名为 swagger 的文件夹,然后创建一个包含以下内容的 index.hbs 文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Swagger-ui</title>

    <link rel="icon" type="image/png" href="https://unpkg.com/swagger-ui-dist@{{version}}/favicon-32x32.png">
    <link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui.css">

    <script src="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui-standalone-preset.js"></script>
    <script src="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui-bundle.js"></script>
</head>
<body>
    <div id="swagger-ui"></div>
    <script>
        window.onload = function() {
            var ui = SwaggerUIBundle({
                urls: [{{#each urls}}
                    {
                        name: "{{name}}",
                        url: "{{url}}"
                    }{{#unless @last}},{{/unless}}{{/each}}
                ],
                dom_id: '#swagger-ui',
                deepLinking: {{deepLinking}},
                presets: [
                    SwaggerUIBundle.presets.apis,
                    SwaggerUIStandalonePreset
                ],
                plugins: [
                    SwaggerUIBundle.plugins.DownloadUrl
                ],
                layout: "{{layout}}"
            });
            window.ui = ui
        }
    </script>
</body>
</html>

最后,在应用程序主类中添加@OpenApiDefinition注释以使注释处理器能够扫描整个应用程序。

@OpenAPIDefinition(
        info = @Info(
                title = "swagger-server",
                version = "0.1",
                description = "My API",
                license = @License(name = "Apache 2.0")
        )
)
public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class);
    }
}

关于 micronaut 1.0.0 中注释处理器的一个建议是,对象上的公共字段不会公开,因此如果您想查看输入或返回值的模式,则需要有 getters/setters。

如果您想尝试上面的运行示例,我有一个带有 swagger 服务器配置的存储库,位于此处https://github.com/frehov/micronaut-swagger-server https://github.com/frehov/micronaut-swagger-server其中包括发布带有要由 Swagger 呈现的 url 和名称对列表的帖子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger for Micronaut 与 Maven 的相关文章

随机推荐

  • Quartz 与“反应式扩展”

    我正在寻找 C 的调度库 很长一段时间以来 我认为 唯一 的选择是 Quartz NET 它非常强大并且工作得很好 但是当我发现 Reactive Extensions RX http msdn microsoft com en us da
  • 如何使用C#与Chrome(Chrome扩展)通信?

    我想创建一个可以在我的 C 应用程序和扩展之间进行通信的桥梁 这是我真正想要的解释 我创建了一个扩展 它将获取 HTML 元素的详细信息 但每次启动 Chrome 时都会启动 除了这样做之外 有什么方法可以向我的 chrome 扩展发送消息
  • 将 ftransform 与折叠 R 包中的 fgroup_by 一起使用

    我正在尝试重现以下输出dplyr代码与R包裹collapse dplyr Code library tidyverse starwars gt select name mass species gt group by species gt
  • 哪个 Swing 布局管理器可以获得我想要的布局?

    我正在尝试按照这个模型制作一个基本的登录菜单 我决定将整个菜单放入 JPanel 中 以便在连接成功后我可以切换到另一个面板 所以我决定使用 Borderlayout 将标题放在北区 将连接按钮放在南区 我将边框布局的中心本身设置为面板 我
  • 实体框架 - 绑定 WPF 树视图控件

    在服务类别表中 ParentCategoryId 是 ServiceCategoryId 它是父类别 我的类别可以有第 n 级层次结构 因此我需要使用树视图控件来呈现它 我怎样才能做到这一点 Thanks 你可以使用分层数据模板 http
  • gem 无法访问 ruby​​gems.org

    我有一个带有 Rackspace 的服务器 用于一些 Ruby 站点 当我尝试时bundle install在一个新网站上我得到 Retrying download gem from http rubygems org due to err
  • Dart 从 UInt8List 获取扩展

    我正在使用该包图像选择器 https pub dev packages image picker接受来自用户的图像 这会产生 PickedFile 和字节数组 由于图像随后被上传 我想知道如何从字节数组中猜测 mime 类型 PickedF
  • conio.h 不包含 textcolor()?

    我一直在考虑在我用 C 编写的 DOS 程序中使用颜色 有人告诉我conio h有textcolor 函数 但是当我在代码中使用它时 编译器 链接器会向我抛出错误 说我对该函数有未定义的引用 Does conio h真的有这个功能还是有人告
  • UTF-8、PHP、Win7 - 现在是否有解决方案可以使用 php 在 Win 7 上保存 UTF-8 文件名?

    更新 只是为了不让您阅读所有内容 PHP 开头 7 1 0alpha2 在 Windows 上支持 UTF 8 文件名 感谢阿纳托尔 贝尔斯基 根据 stackoverflow 上的一些链接 我找到了部分答案 https stackover
  • 从镜像创建 Docker 容器而不启动它

    作为我的部署策略的一部分 我使用 Upstart 管理 Docker 容器 为此 我需要从注册表中提取图像并创建一个命名容器 如建议的那样 用于运行容器的新贵脚本不会管理生命周期 https stackoverflow com questi
  • 在javascript中访问函数内的实例变量?

    如何以最简单的方式访问函数内的实例变量 function MyObject Instance variables this handler Methods this enableHandler function var button doc
  • Spring3/Hibernate3/TestNG:有些测试给出 LazyInitializationException,有些则没有

    前言 我在单元测试中遇到了 LazyInitializationException 的问题 而且我很难理解它 正如你从我的问题中看到的那样Spring 中的数据库会话 https stackoverflow com questions 13
  • 获取GridView中选定行的索引

    我想使用复选框获取从 gridview 选择的行 复选框是这样的
  • 这种类型注释在没有 TypeScript 的 React 代码中如何工作?

    我在看这段代码示例 https reacttraining com react router web example auth workflow在 ReactRouter 页面上 这篇文章很有趣 const PrivateRoute com
  • 将过滤器添加到 Eclipse 中的 Project Explorer

    我想向 Project Explorer 添加一个新的过滤器 以向用户隐藏一些在 Eclipse RCP 应用程序中自动创建的项目 到目前为止我已经找到了两个扩展点 org eclipse ui ide resourceFilters 允许
  • 电报机器人预填充文本供用户编辑

    Telegram 机器人向我发送一条带有文本片段的消息 我想要编辑该文本片段 然后发送回机器人进行进一步处理 复制和粘贴需要时间 重新输入消息需要时间 理想情况下 我想按机器人消息上的内联按钮 编辑 并使消息文本出现在我的回复输入框中进行编
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • 重写 jmeter.properties

    是否可以在不关闭并重新启动JMeter的情况下重新读取jmeter properties 也许有任何额外的类会触发这个过程 有时我需要使用属性的值 并且每次都重新启动 JMeter 并不方便 所以我想自动化此过程 无需从文件中重新读取 jm
  • Swagger for Micronaut 与 Maven

    我想从 Spring Boot 2 切换到 Micronaut 框架 而且我在 Swagger 设置上遇到了困难 在 Spring Boot 2 项目中 我有以下依赖项