【问题标题】:Java Map 的 RAML 1.0 表示
【发布时间】:2018-10-27 08:06:57
【问题描述】:

我有包含 "javaType": "java.util.Map<String, java.util.List<Employee>>" 的 RAML 架构

我有单独的架构 (employee.schema) 可用,代表 Employee 类。

但由于我没有在 RAML 中使用employee.schema,因此它不会生成 Employee 类,并且在将 RAML 转换为 Java 时会引发错误。

{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "description": "Desc",
  "properties": {
    "employeeGroups": {
      "type": "object",
      "javaType": "java.util.Map<String, java.util.List<Employee>>"
    }
  },
  "additionalProperties": false
}

任何人都可以分享 cmets 如何在 RAML 中表示 "javaType": "java.util.Map&lt;String, java.util.List&lt;Employee&gt;&gt;" 吗?

RAML Version: 1.0

【问题讨论】:

  • 您可以使用 jsonschema 定义映射,但不确定 raml-java-parser 是否会处理它,也许先尝试使用更简单的映射来查看它是否有效,例如:“mapInt”:{ “类型”:“对象”,“附加属性”:{“类型”:“整数”} }
  • 您说:“但由于我没有在 RAML 中使用 employee.schema,所以它不会生成 Employee 类......”。当您的 RAML 中不包含依赖项之一时,您为什么期望它能够工作?您是否尝试在生成 Java 之前向 RAML 添加包含语句?
  • 您是否尝试过创建一个 Wrapper 类并在 RAML 中引用它而不是 Map 类?

标签: java raml raml-java-parser raml-1.0


【解决方案1】:

这里有 2 个选项。

第一个是在 raml 文件的 types 定义中仅包含带有架构的外部文件。

假设:

  • 您的示例中表示的对象称为EmployeeGroupsContainer
  • 具有Employee 架构的文件称为employee.schema,与raml 文件位于同一目录中。

types 部分如下所示:

types:
    EmployeeGroupsContainer:
        schema: |
                  {
                    "$schema": "http://json-schema.org/schema#",
                    "type": "object",
                    "description": "Desc",
                    "properties": {
                      "employeeGroups": {
                        "type": "object",
                        "javaType": "java.util.Map<String, java.util.List<Employee>>"
                      }
                    },
                    "additionalProperties": false
                  }
    Employee:
        schema:
            !include employee.schema

这将是推荐的方法,也是我将使用的方法。

第二个选项是之前生成Employee 对象,一旦你有了它,你就可以生成其余的,因为Employee 类现在将在你的类路径中。最好的方法是通过两次单独执行用于生成代码的工具(第一次使用employee.schema 生成Employee 类,第二次使用其余的)。

您可能很想生成一次Empolyee 并将其移动到src/main/java,但我建议不要这样做,因为保持生成的代码版本化(在 git 或任何其他 VCS 中)始终是一种不好的做法。生成的代码应始终在构建步骤中生成。

我能想到的选择第二种方法而不是第一种方法的唯一情况是您无权访问主 raml 文件。但如果你有它,我肯定会选择第一种方法。

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2016-12-22
    • 1970-01-01
    • 2016-11-07
    • 2016-06-04
    • 2017-01-21
    • 2019-03-30
    • 2016-03-04
    • 2020-10-28
    相关资源
    最近更新 更多