【问题标题】:Swagger Error Expected type string but found type integerSwagger 错误预期类型字符串但找到类型整数
【发布时间】:2015-04-29 15:31:48
【问题描述】:

我最近开始使用 swagger 为我们的 RESTful api 生成文档。我使用 yamlbeans-1.09.jar 将我的 Java DTO 转换为 yaml 文件。 一切正常,并且 yaml 甚至在 http://www.yamllint.com/ 上得到了正确验证,但仍然在使用 Swagger 接口对其进行测试时,它给出了一个错误 "Expected type string but found type integer""No enum match for: 2" 我在文件中提到 swagger : 2.0 的地方。

我的示例 yml 文件是:

basePath: /employment
host: api.xxxx.com
schemes: 
    - https
swagger: 2.0
info: 
    title: API Doc
    description: Description for the info goes here
    version: 1.0.0

它总是倾向于在 swagger 版本之前只给出一个行号。任何帮助将不胜感激。

编辑:我已经在java代码中将swagger版本定义为字符串,写法如下:

HashMap<String, Object> rootElementsForYml = new HashMap<String, Object>();
rootElementsForYml.put(SWAGGER, "2.0");
rootElementsForYml.put(HOST, "api.xxxx.com");
rootElementsForYml.put(BASEPATH, basePath);
rootElementsForYml.put(SCHEMES, new String[]{"https"});

但它仍然没有给出结果和同样的错误。

【问题讨论】:

    标签: java yaml swagger


    【解决方案1】:

    这是因为版本值是字符串而不是数字。只需指定 2.0 就会被解释为一个数字。用"2.0" 之类的引号括起来就可以了。

    【讨论】:

    • 好吧,这恰好是最终的 yaml,您可以在其中看到所有内容,无论是 url 还是数字,都没有引号。在 Java 代码中定义数据时,我将 swagger 版本保留为字符串,您可以在原始问题的 Edit 部分中看到它。除了版本之外,它完美地选择了主机、基本路径等。
    • 这看起来像 yamlbeans 中的一个错误,因为它不尊重字符串类型并且没有正确序列化它。大多数字符串不需要用引号包裹,但如果它们代表其他数据类型(数字、布尔值),则需要包裹。
    • 另外,不太清楚你为什么选择这种手动创建自己的 yaml 而不是使用 swagger-core 的路径。
    • 如果是 yamlbeans 的问题,那么至少 yaml-lint 验证也应该失败。如您所见,我已将版本指定为引号之间的字符串。但是除了这个版本号之外,所有的验证都通过了。就使用 swagger-core 而言,我只是暂时尝试创建 yml,所以使用 yamlbeans。但正如你所说,我肯定会使用 swagger-core 来试一试。谢谢!
    • yaml-lint 可以正常工作,因为 YAML 本身是有效的。但是有效的 YAML 并不能做出有效的定义。你也可以在 YAML 中写 hello: world 并且可以验证,但就 Swagger 而言它是无效的。
    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多