【问题标题】:What does the "Unrecognized token openapi" error mean when using OpenAPI Generator with OpenAPI 3.0?将 OpenAPI Generator 与 OpenAPI 3.0 一起使用时,“无法识别的令牌 openapi”错误是什么意思?
【发布时间】:2019-04-21 11:47:57
【问题描述】:

我已经编写了 OpenAPI 3.0 格式的 API 定义 (https://swagger.io/docs/specification/basic-structure/)。现在我正在尝试生成 Java Spring 对象,就像我之前使用 Swagger 2.0 定义及其关联的 Maven 插件所做的那样。

到目前为止,我有一个基本的 API 定义,开头是:

openapi: 3.0.0 info: title: Demo API description: This is a basic REST API implementing the [Open API Specification](https://en.wikipedia.org/wiki/OpenAPI_Specification). version: 0.0.1

在我添加的pom.xml 文件中:

<dependency>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-cli</artifactId>
  <version>3.3.3</version>
</dependency>

但是在执行mvn install时,我得到了这个错误:

com.fasterxml.jackson.core.JsonParseException: Unrecognized
     token 'openapi': was expecting ('true', 'false' or 'null')
     at [Source: definition\DEFINITION.yml; line: 1, column: 9]

有谁知道问题出在哪里?

【问题讨论】:

  • 这是您的 definition.yml 的实际缩进还是只是复制粘贴格式问题?缩进错误 - info 必须与 openapi 处于同一级别。将您的 YAML 粘贴到 editor.swagger.io 以确保语法正确。
  • 这只是复制粘贴。我的 yaml 文件是正确的,在 Swagger 编辑器中编辑时没有显示错误。但看起来“openapi”标签无法识别。
  • 这已经晚了,可能是错误的,但也许你应该使用 openapi-generator-maven-plugin 而不是 CLI jar?
  • 我在 openapi 规范 3.0.0 和 openapi-generator-maven-plugin 5.10 版中遇到了同样的异常。将 openapi-generator-maven-plugin 升级到 5.2.1 版解决了这个问题。

标签: openapi openapi-generator


【解决方案1】:

我遇到了同样的问题(我需要提一下,这只发生在 Windows 上。相同的代码在 linux 下运行良好)。虽然我没有“解决方案”,但对我有用的解决方法是设置:

validateSpec = false

类似

generatorName = "typescript-angular"
validateSpec = false
inputSpec = "${myInputSpec}".toString()
outputDir = "${generatedCodeDir}".toString()

【讨论】:

    【解决方案2】:

    我在使用 io.swagger.codegen.v3.swagger-codegen-maven-plugin 和 windows 时遇到了同样的问题(在 MacOS 上运行良好 - 所以这不可能是语法问题)。

    升级到最新的插件版本确实修复了错误(撰写本文时为 3.0.27)。

    【讨论】:

      【解决方案3】:

      我在使用 OpenAPI Generator 的 CLI 版本时收到了类似的错误。基于this issue/comment,我相信YAML 规范中的任何 验证问题都会触发生成器假定文件是JSON。

      至少我的文件是这样的……遗憾的是,我不得不使用不同的工具来验证 YAML,然后 OpenAPI Generator 才起作用。

      【讨论】:

        【解决方案4】:

        经过多次点击和尝试后,我发现问题出在我的 Swagger 文件上。在那个url 不是一个正确的URL。类似于/api(没有主机域的网址)。

        OpenAPI 生成器本可以提供更好的错误消息。无论如何放置一些有效的网址,让我生成代码。

        【讨论】:

          【解决方案5】:

          我目前正在使用 openapi-generator-maven-plugin 从 OpenAPI JSON 模式生成 Java 类。

          这些错误看起来像是语法问题。所以首先要确保你的架构在语法上是正确的并且看起来像这样:

          {
            "openapi": "3.0.0",
            "info": {
              "title": "Demo API",
              "description": "This is a basic REST API implementing the [Open API Specification](https://en.wikipedia.org/wiki/OpenAPI_Specification).",
              "version": "0.0.1"
            },
            # Schema definition goes here
          }
          

          【讨论】:

          • 为什么@vpa 要将他完全有效的 YAML 简化为 JSON?
          • @chrisinmtown,用户这样做没有逻辑意义。但由于异常表明它正在尝试使用 JSON 解析器来使用 YAML 输入,我可以看到这可能会解决这个问题。
          猜你喜欢
          • 2020-10-26
          • 2021-11-09
          • 1970-01-01
          • 2022-07-23
          • 2022-09-30
          • 2022-07-15
          • 2018-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多