69

我有 RAML 模式,其中包含 "javaType": "java.util.Map<String, java.util.List<Employee>>"

我有单独的模式(employee.schema)代表员工类。

但由于我没有在 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
}

任何人都可以分享如何"javaType": "java.util.Map<String, java.util.List<Employee>>"在 RAML 中表示的评论吗?

RAML Version: 1.0
4

1 回答 1

1

您在这里有 2 个选项。

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

例如,假设:

  • 您的示例中表示的对象称为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类,第二次用于生成代码)。

可能您很想生成Employee一次并将其移动到src/main/java.,但我建议不要这样做,因为保持生成的代码版本化(在 git 或任何其他 VCS 中)始终是一种不好的做法。代码生成应该始终是整个构建过程的一部分(如果您使用 maven,通常使用 maven 插件)。

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

于 2021-12-23T01:00:00.223 回答