Сгенерированная схема JSON не показывает свойства полей типа «объект» - PullRequest
0 голосов
/ 09 января 2019

Схема JSON, созданная spring-data-rest, не содержит определения свойств типа «объект».

Я пытаюсь использовать сгенерированную схему для автоматического создания формы с использованием uniforms-material / AutoForm. Для правильного создания формы необходимо определение этих свойств объекта.

curl localhost:8080/api/profile/agentContactRecords -H 
"Accept:application/schema+json"

Я ожидаю, что результат запроса выше схемы будет

...
"Agent Business Lines" : {
  "title" : "Agent business lines",
  "type" : "array",
  "items" : {
    "type" : "object",
          "properties": {
            "Business Line": {
              "type": "string",
              "title": "The Business line Schema"
            },
            "Agent Name": {
              "type": "string",
              "title": "The Agent name Schema"
            }
          }
  }
},
"Agent" : {
  "title" : "Agent",
  "type" : "object",
          "properties": {
            "Agent Number": {
              "type": "string",
              "title": "The Agent number Schema"
            }
          }
},
...

Но я получаю следующее

...
"Agent Business Lines" : {
  "title" : "Agent business lines",
  "readOnly" : false,
  "type" : "array",
  "items" : {
    "type" : "object"
  }
},
"Agent" : {
  "title" : "Agent",
  "readOnly" : false,
  "type" : "object"
},
...

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Свойство объекта в моей сущности было аннотировано @ElementCollection (targetClass = "className.class"). Однако сам targetClass был аннотирован аннотацией @Entity. Когда я изменил целевой класс на простой Java-объект (без аннотации @Entity), поля начали появляться в схеме json со свойством $ ref, как показано ниже.

    "agentBusinessLines" : {
      "title" : "Agent business lines",
      "readOnly" : false,
       "type" : "array",
      "items" : {
        "$ref" : "#/definitions/agentBusinessLineNonEntityCopy"
      }
    },
  "definitions" : {
    "agentBusinessLineNonEntityCopy" : {
      "type" : "object",
  "properties" : {
    "businessLineAcronym" : {
      "title" : "Business line acronym",
      "readOnly" : false,
      "type" : "string"
    },
    "agentName" : {
      "title" : "Agent name",
      "readOnly" : false,
      "type" : "string"
    },
    "company" : {
      "title" : "Company",
      "readOnly" : false,
      "type" : "string"
    },
    "agentNumber" : {
      "title" : "Agent number",
      "readOnly" : false,
      "type" : "integer"
    }
  }
}
0 голосов
/ 10 января 2019

Я проверил исходный код для PersistentEntityToJsonSchemaConverter.java в Spring Darta Rest и обнаружил, что он не определяет свойства элементов (объекта типа) внутри свойства массива.

Я нашел способ расширить этот класс и добавить эту функциональность расширение класса RepositoryRestMvcConfiguration и его метода jsonSchemaConverter. К сожалению, нет никакого способа расширить класс JsonSchema, потому что он использует объект области видимости пакета (AbstractJsonSchemaProperty) в своем конструкторе.

...