Java Map的RAML 1.0表示

Yog*_*ati 17 java raml raml-java-parser raml-1.0

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

我有单独的架构(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
}
Run Code Online (Sandbox Code Playgroud)

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

RAML Version: 1.0
Run Code Online (Sandbox Code Playgroud)

gma*_*jon 1

这里你有两个选择。

一个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
Run Code Online (Sandbox Code Playgroud)

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

第二个选择是预先生成Employee对象,一旦拥有它,您就可以生成其余的对象,因为该类Employee现在位于您的类路径中。执行此操作的最佳方法是两次单独执行用于生成代码的工具(第一个用于employee.schema生成Employee类,第二个用于生成其余部分)。

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

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