Я использую openapi-codegen версии 4.2.2 и спецификацию openapi 3.0.0 для создания API Java-сервера из файла yaml следующим образом:
openapi-generator generate -i test.yaml -g spring -o /tmp/springTest
Проблема, с которой я столкнулся, заключается в том, что сгенерированный код пытается импортировать несуществующий класс. API должен принимать объект типа pet и возвращать того же питомца. Домашнее животное должно быть кошкой, собакой или ящерицей. Я использовал пример наследования из спецификации openapi и создал на его основе следующий файл yaml:
openapi: 3.0.0
info:
version: 1.0.0
title: Three Pets
termsOfService: http://swagger.io/terms
tags:
- name: test
paths:
/echoPet:
post:
tags:
- test
summary: Return input
description: Send pet get pet
operationId: echoPet
parameters:
- name: pet
in: query
schema:
oneOf:
- $ref: '#/components/schemas/Cat'
- $ref: '#/components/schemas/Dog'
- $ref: '#/components/schemas/Lizard'
responses:
"200":
description: Pet sucesfully returned
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Pet'
servers:
- url: https://localhost:8080/v2
- url: http://localhost:8080/v2
components:
schemas:
Pet:
type: object
required:
- pet_type
properties:
pet_type:
type: string
discriminator:
propertyName: pet_type
mapping:
cachorro: Dog
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
huntingSkill:
type: string
description: The measured skill for hunting
enum:
- clueless
- lazy
- adventurous
- aggressive
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
Lizard:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Lizard`
properties:
lovesRocks:
type: boolean
https://github.com/OAI/OpenAPI-Specific ... tor-object
Насколько я понимаю, он должен генерировать API, который принимает один из следующих типов Cat, Dog, Lizard. (Если я использую здесь Pet, проверка говорит, что Pet не относится к типу объекта)
Сгенерированный EchoPetApi.java использует импорт для:
import org.openapitools.model.OneOfCatDogLizard;
import org.openapitools.model.OneOfPet;
Но этих классов не существует, что делает код некомпилируемым. Все, что у меня есть в пакете org.openapitools.model, это:
Cat.java
CatAllOf.java
Dog.java
DogAllOf.java
Lizard.java
LizardAllOf.java
Pet.java
Здесь Cat, Dog и Lizard.java выглядят так, как и ожидалось, и все они расширяют Pet.java, но CatAllOf, DogAllOf и LizardAllOf ничего не расширяют, а имеют только свойства соответствующего класса и немного другой метод hashCode().
Вот EchoPetApi.java с несуществующим импортом (первые два, после пакет):
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (4.2.2).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
package org.openapitools.api;
import org.openapitools.model.OneOfCatDogLizard;
import org.openapitools.model.OneOfPet;
import io.swagger.annotations.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2019-12-18T11:27:04.474+01:00[Europe/Berlin]")
@Validated
@Api(value = "echoPet", description = "the echoPet API")
public interface EchoPetApi {
default Optional getRequest() {
return Optional.empty();
}
@ApiOperation(value = "Return input", nickname = "echoPet", notes = "Send pet get pet", response = OneOfPet.class, tags={ "test", })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Pet sucesfully returned", response = OneOfPet.class) })
@RequestMapping(value = "/echoPet",
produces = { "application/json" },
method = RequestMethod.POST)
default ResponseEntity echoPet(@ApiParam(value = "", defaultValue = "null") @Valid OneOfCatDogLizard pet) {
return new ResponseEntity(HttpStatus.NOT_IMPLEMENTED);
}
}
Если я использую функцию проверки из openapi-codegen, она не возвращает никаких ошибок:
$ openapi-generator validate -i test.yaml
Validating spec (test.yaml)
No validation issues detected.
Подробнее здесь: https://stackoverflow.com/questions/593 ... -not-exist
Почему openapi-генератор использует несуществующий импорт ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1769738570
Anonymous
Я использую openapi-codegen версии 4.2.2 и спецификацию openapi 3.0.0 для создания API Java-сервера из файла yaml следующим образом:
openapi-generator generate -i test.yaml -g spring -o /tmp/springTest
Проблема, с которой я столкнулся, заключается в том, что сгенерированный код пытается импортировать несуществующий класс. API должен принимать объект типа pet и возвращать того же питомца. Домашнее животное должно быть кошкой, собакой или ящерицей. Я использовал пример наследования из спецификации openapi и создал на его основе следующий файл yaml:
openapi: 3.0.0
info:
version: 1.0.0
title: Three Pets
termsOfService: http://swagger.io/terms
tags:
- name: test
paths:
/echoPet:
post:
tags:
- test
summary: Return input
description: Send pet get pet
operationId: echoPet
parameters:
- name: pet
in: query
schema:
oneOf:
- $ref: '#/components/schemas/Cat'
- $ref: '#/components/schemas/Dog'
- $ref: '#/components/schemas/Lizard'
responses:
"200":
description: Pet sucesfully returned
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Pet'
servers:
- url: https://localhost:8080/v2
- url: http://localhost:8080/v2
components:
schemas:
Pet:
type: object
required:
- pet_type
properties:
pet_type:
type: string
discriminator:
propertyName: pet_type
mapping:
cachorro: Dog
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
huntingSkill:
type: string
description: The measured skill for hunting
enum:
- clueless
- lazy
- adventurous
- aggressive
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
Lizard:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Lizard`
properties:
lovesRocks:
type: boolean
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#discriminator-object
Насколько я понимаю, он должен генерировать API, который принимает один из следующих типов Cat, Dog, Lizard. (Если я использую здесь Pet, проверка говорит, что Pet не относится к типу объекта)
Сгенерированный EchoPetApi.java использует импорт для:
import org.openapitools.model.OneOfCatDogLizard;
import org.openapitools.model.OneOfPet;
Но этих классов не существует, что делает код некомпилируемым. Все, что у меня есть в пакете org.openapitools.model, это:
Cat.java
CatAllOf.java
Dog.java
DogAllOf.java
Lizard.java
LizardAllOf.java
Pet.java
Здесь Cat, Dog и Lizard.java выглядят так, как и ожидалось, и все они расширяют Pet.java, но CatAllOf, DogAllOf и LizardAllOf ничего не расширяют, а имеют только свойства соответствующего класса и немного другой метод hashCode().
Вот EchoPetApi.java с несуществующим импортом (первые два, после пакет):
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (4.2.2).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
package org.openapitools.api;
import org.openapitools.model.OneOfCatDogLizard;
import org.openapitools.model.OneOfPet;
import io.swagger.annotations.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2019-12-18T11:27:04.474+01:00[Europe/Berlin]")
@Validated
@Api(value = "echoPet", description = "the echoPet API")
public interface EchoPetApi {
default Optional getRequest() {
return Optional.empty();
}
@ApiOperation(value = "Return input", nickname = "echoPet", notes = "Send pet get pet", response = OneOfPet.class, tags={ "test", })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Pet sucesfully returned", response = OneOfPet.class) })
@RequestMapping(value = "/echoPet",
produces = { "application/json" },
method = RequestMethod.POST)
default ResponseEntity echoPet(@ApiParam(value = "", defaultValue = "null") @Valid OneOfCatDogLizard pet) {
return new ResponseEntity(HttpStatus.NOT_IMPLEMENTED);
}
}
Если я использую функцию проверки из openapi-codegen, она не возвращает никаких ошибок:
$ openapi-generator validate -i test.yaml
Validating spec (test.yaml)
No validation issues detected.
Подробнее здесь: [url]https://stackoverflow.com/questions/59390182/why-does-openapi-generator-use-imports-that-do-not-exist[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия