Я пытаюсь использовать swagger-codegen для генерации Java клиента API для спецификации схемы. В схеме используется расширение поставщика x-discriminator-value
для создания модели наследования.
Например, я использовал спецификацию схемы, которую я нашел как yaml здесь и преобразовал в json (я завернул результат с "spe c" root, чтобы я мог отправить результат в онлайн-генератор кода, как будет объяснено ниже).
Когда я пытаюсь сгенерировать клиента Java как локально, так и с помощью онлайн-генератора кода я получаю, что десериализация не выполняется с использованием значения x-discriminator-value
. Вместо этого это делается с названием модели. Я вижу это в сгенерированном файле JSON.java
, который содержит карту от дискриминатора к классу:
classByDiscriminatorValue.put("PhoneSetting".toUpperCase(), PhoneSetting.class);
classByDiscriminatorValue.put("SceneSetting".toUpperCase(), SceneSetting.class);
classByDiscriminatorValue.put("TextSetting".toUpperCase(), TextSetting.class);
[Чтобы увидеть это, вы можете post
выше json до https://generator.swagger.io/api/gen/clients/java
и проверить JSON.java
file.
Из того, что я понимаю, я понял, что ключ должен иметь значение x-discriminator-value
. Так, например, поскольку схема имеет:
"SceneSetting": {
"description": "Scene Setting",
"x-discriminator-value": "SCENE",
"allOf": [
{
"$ref": "#/definitions/SectionSetting"
},
, тогда у меня должно быть отображение
classByDiscriminatorValue.put("SCENE".toUpperCase(), SceneSetting.class);
вместо classByDiscriminatorValue.put ("SceneSetting" .toUpperCase (), SceneSetting. класс);
Буду признателен за любую помощь по этому вопросу.