RAML 1.0 представление Java Map

У меня есть схема RAML, которая содержит "javaType": "java.util.Map<String, java.util.List<Employee>>"

У меня есть отдельная схема (employee.schema), которая представляет класс Employee.

Но так как я не использовал employee.schema в raml, он не генерирует класс 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

1 ответ

У вас есть 2 варианта здесь.

Первый просто включить внешний файл со схемой в определение вашего файла.

Например, если предположить, что:

  • Объект, представленный в вашем примере, называется EmployeeGroupsContainer,
  • И файл со схемой называется и находится в той же директории, что и файл.

The 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.schemaдля генерации класса, а второй с остальными).

Может быть, вы испытываете искушение создать Employeeодин раз и переместите его в src/main/java, но я бы рекомендовал против этого, так как сохранение версий сгенерированного кода (в git или любой другой системе контроля версий) всегда является плохой практикой. Генерация кода всегда должна быть частью общего процесса сборки (обычно с плагином maven, если вы используете maven).

Единственный сценарий, который я могу придумать, чтобы выбрать второй подход вместо первого, заключается в том, что у вас нет доступа к основному ramlфайл. Но если он у вас есть, я бы определенно пошел на первый подход.

Другие вопросы по тегам