Дискриминатор в полиморфизме OpenApi 3.0.2

Попытка использовать OpenApi 3.0.2 для реализации полиморфизма.

Type1:
  type: object
  required:
  - dn
  - typeOfType
  properties:
    dn:
      description: Description
      type: string
    typeOfType:
      type: string
      enum:
        - Type2
        - Type3
  discriminator:
    propertyName: typeOfType
Type2:
  allOf:
  - $ref: '#/components/schemas/Type1'
  - type: object
    properties:
      name:
        $ref: '#/components/schemas/name' #abstract object
    required:
    - name
Type3:
  allOf:
  - $ref: '#/components/schemas/Type1'
  - type: object
    properties:
      surname:
        $ref: '#/components/schemas/surname' #abstract object
    required:
    - surname

Мой сгенерированный код выглядит так:

@Validated
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "Discriminator{propertyName='typeOfType', mapping=null}", visible = true )
@JsonSubTypes({
@JsonSubTypes.Type(value = WniosekEkwU1.class, name = "Type1"),
@JsonSubTypes.Type(value = WniosekEkwU1A.class, name = "Type2"),
})
public class Type1  implements Serializable {
private static final long serialVersionUID = 1L;
...
}

Подводя итог, полиморфизм не работает. Интересно, нормально ли работает мой генератор, когда он создает property = "Discriminator{propertyName='typeOfType', mapping=null}". Я не могу найти ни одного примера, где был бы сгенерирован подобный код. Когда я заменяю этот код на property = "typeOfType", все работает нормально.

Мой код неверен или требуется дополнительная настройка?

У меня также есть конечная точка для тестирования этих классов. Я получаю ошибку:

Resolved exception caused by handler execution:  org.springframework.http.converter.HttpMessageNotReadableException: 
JSON parse error: Missing type id when trying to resolve subtype of [simple type, class pl.asdf.asdf.asdf.gen.model.type1]: missing type id property 
'Discriminator{propertyName='typeOfType', mapping=null}' (for POJO property 'type1'); nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: 
Missing type id when trying to resolve subtype of [simple type, class pl.asdf.asdf.asdf.gen.model.Type1]: 
missing type id property 'Discriminator{propertyName='typeOfType', mapping=null}' (for POJO property 'type1')

Я не получаю эту ошибку, когда редактирую свойство, указанное выше. Думаю, это связано. Есть какое-нибудь решение?

Какую версию Swagger Codegen вы использовали? Можете попробовать последнюю 3.0.4-SNAPSHOT? Если у SNAPSHOT также есть эта проблема, отправьте отчет об ошибке на github.com/swagger-api/swagger-codegen/issues.

Helen 21.12.2018 10:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
4 787
1

Ответы 1

Эта ошибка исправлена ​​в текущей версии 3.0.5-SNAPSHOT: https://github.com/swagger-api/swagger-codegen-generators/issues/291

Единственное, что я хочу упомянуть в вашем примере кода, - это удалить определение перечисления для свойства typeOfType.

Этого должно хватить:

Type1:
  type: object
  discriminator:
    propertyName: typeOfType
  required:
  - dn
  - typeOfType
  properties:
    dn:
      description: Description
      type: string
    typeOfType:
      type: string

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