如何生成 Swagger codegen Java 模型作为 JPA 实体

2023-11-27

我正在使用 Swagger codegen 创建要在 Spring REST 服务器中使用的 Java 模型,并且想知道如何让 Swagger 将每个模型声明为 JPA 实体。

我用以下代码生成代码swagger-codegen-maven-plugin如下:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.4.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/openApi/Rack.json</inputSpec>
                <language>spring</language>
                <groupId>com.me</groupId>
                <artifactId>rest-server</artifactId>
                <apiPackage>com.me.rest.api</apiPackage>
                <modelPackage>com.me.rest.model</modelPackage>
                <invokerPackage>com.me.rest.invoker</invokerPackage>
                <configOptions>
                    <sourceFolder>src/gen/java/main</sourceFolder>
                    <java8>true</java8>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

正如我现在所得到的,这是生成的缩写 java 代码:

@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "...")

public class Rack   {
  @JsonProperty("id")
  private Long id = null;

  @JsonProperty("name")
  private String name = null;

  ...
}

如何让 Swagger 添加 @Entity 和 @Id JPA 注释,如下所示?

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "...")

public class Rack   {
  @Id
  @JsonProperty("id")
  private Long id = null;

  @JsonProperty("name")
  private String name = null;

  ...
}

这样,我所要做的就是让 Spring 自动将这些生成的类公开为 REST API,将以下内容添加到我的pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

然后我可以使用 Spring-Data 创建 JPA 存储库,如下所示:

public interface RackRepository extends CrudRepository<Rack, Long> {
}

最近合并了一个 PR,解决了您的问题:https://github.com/OpenAPITools/openapi-generator/pull/11775

您需要升级您的Maven插件才能使用最新版本(目前未发布,仅提供快照)

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>6.0.0-SNAPSHOT</version>
    ...
</plugin>

配置可能略有不同。

然后您需要在规范中添加 x-class-extra-annotation 和 x-field-extra-annotation 。

以宠物诊所为例:

  schemas:
    Pet:
      type: object
      x-class-extra-annotation: "@javax.persistence.Entity"
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
          x-field-extra-annotation: "@javax.persistence.Id"
        name:
          type: string
        tag:
          type: string
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成 Swagger codegen Java 模型作为 JPA 实体 的相关文章

随机推荐

  • 具有输入/输出流的 Java 进程

    我下面有以下代码示例 您可以在 bash shell 中输入命令 即echo test并让结果回显 然而 读完第一遍之后 其他输出流不起作用 为什么会这样或者我做错了什么 我的最终目标是创建一个线程计划任务 定期向 bash 执行命令 以便
  • Android 10 - 作为存储在应用程序主目录中的子进程启动可执行文件的替代方案

    我有一个 Android 应用程序 C Xamarin 将 python 环境与其 apk 捆绑在一起 将 python 文件提取到 app 文件目录中 通过将 python 可执行文件作为子进程执行来运行 python 代码 这已经工作了
  • 两个鸡蛋问题混乱

    两个鸡蛋问题 给你 2 个鸡蛋 您可以进入一栋 100 层的建筑 鸡蛋可能非常硬 也可能非常脆弱 这意味着如果从一楼掉落它可能会破裂 或者如果从 100 楼掉落甚至可能不会破裂 两个鸡蛋是相同的 你需要计算出 100 层楼的最高楼层 鸡蛋从
  • 在android中以编程方式获取屏幕密度?

    如何在android中以编程方式获取屏幕密度 我的意思是 如何找到当前设备的屏幕 dpi 您可以从显示屏上获取信息显示指标 struct DisplayMetrics metrics getResources getDisplayMetri
  • C#:如何处理大数算术?

    我正在编写一个应用程序 其中涉及带有大量数字的算术运算 我之前编写过一个类 通过将大数字定义为字符串 然后使用慢速算术字符串函数来简化对大数字的处理 这是最好的方法吗 如果不是 我应该如何解决这个问题 C 有内置的东西可以应对这种情况吗 如
  • 在 JavaScript 的类型文件中声明接口

    项目信息 我正在开发一个 JavaScript 项目 该项目使用 d ts文件 这是我之前提出的问题的后续问题 因此您可以查看有关该项目的更多信息here Problem 尽管我通常可以从类型文件中提取函数 但我无法提取空的或纯粹由接口组成
  • 如果从 Windows 8 RTM 中设置的提升进程和非默认浏览器运行,ShellExecute 会失败

    在 Windows 8 RTM Chrome Firefox 中设置非默认浏览器并尝试运行如下代码 ShellExecute NULL open http stackoverflow com NULL NULL SW SHOWNORMAL
  • 如何获取 cURL 获取的最后一个 URL?

    如果给定 URL 重定向到另一个 URL cURL将获取最后一个 curl setopt ch CURLOPT FOLLOWLOCATION true 但是如何记录 cURL 最后获取的 URL 是什么 With curl setopt c
  • 用于选择以下兄弟的 XPath

    这是我目前拥有的代码 div ul class nav nav pills nav stacked li li li li li li li li li section span ABZ span section section span
  • 模板类方法的部分特化或实例化

    我有带有几个模板参数的模板结构 template
  • StackFrame 在发布模式下的行为有所不同

    这是我的代码 public class UserPreferences
  • TextView旋转保持宽度和高度

    我试图旋转文本视图 但是当我旋转它时 它会保留宽度和高度信息 我想要所选区域消失我只想文本出现在居中对齐的绿色指示器上 我正在更改java部分中的文本 小文本 但是当文本的长度发生变化时 对齐方式会变得疯狂 图3 这是我的代码我做错了什么
  • 访问日志中的奇怪请求导致IllegalArgumentException

    我使用 tomcat8 0 43 作为我的服务器 在查看我的日志时 有时我会看到 信息 org apache coyote http11 AbstractHttp11Processor process 解析 HTTP 请求标头时出错注意 H
  • 类型错误:$(...)[1].attr 不是函数

    我的链接设置如下 HTML a href www example1 com class some link a href www example2 com class some link a href www example3 com cl
  • SwipeRefreshLayout 阻止水平滚动 RecyclerView

    我的设置很简单
  • 将标签移动到饼图中间

    我的饼图可以正常工作 但我注意到实际图表的文本框似乎无法正常工作 它们只是聚集在一起 所以我想知道是否有什么方法可以将标签移到白色圆圈所在的中间 并在其旁边有匹配的颜色 crimeTypes dict crimeData Crime typ
  • 抽象类的集合(或类似的东西......)

    场景 我正在用 Java 编写一个涉及汽车的程序 注意 我 尽我所能 简化了这个场景 使其更通用且更容易理解 我实际上并不是在和汽车打交道 我创建了一个Cars类 它是一个集合Car对象 The Car对象有一个speed 双 和一个yea
  • Google Place API - 始终返回此“状态”:“REQUEST_DENIED”

    我目前正在使用 Google Place API 每当我要访问此链接时都会遇到问题 输入如下信息纬度 经度 and API key并设置传感器等于假 但它总是显示 debug info html attributions results s
  • python 套接字挂在连接上

    我正在尝试使用套接字模块在 python 中创建透明代理 但由于某种原因 它挂在 connect 套接字上 这是我正在使用的代码 from future import division import socket import struct
  • 如何生成 Swagger codegen Java 模型作为 JPA 实体

    我正在使用 Swagger codegen 创建要在 Spring REST 服务器中使用的 Java 模型 并且想知道如何让 Swagger 将每个模型声明为 JPA 实体 我用以下代码生成代码swagger codegen maven