Попытка использовать 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')
Я не получаю эту ошибку, когда редактирую свойство, указанное выше. Думаю, это связано. Есть какое-нибудь решение?




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