如何跳过从 modelsEnum 名称中删除公共前缀?我有一个具有单个值的枚举(将来我将有更多值)并且 swagger code gen 插件使用枚举CODE而不是AIRPORT_CODE生成类
properties:
type:
enum: ["AIRPORT_CODE"]
description: the type of location that is identified by the value
Run Code Online (Sandbox Code Playgroud) 我有很多 swagger 文件,使用相同的定义。我想将此定义移动到一个单独的文件并引用它们。
主要 swagger 文件如下所示:
swagger: '2.0'
info:
version: 1.0.0
basePath: /api
tags:
- name: MyClient
schemes:
- http
consumes:
- application/json
produces:
- application/json
paths:
/v1/myrequest:
post:
tags:
- PassportCheck
summary: ????????? ??????? ??
operationId: passportCheck
produces:
- application/json
parameters:
- name: Body
in: body
required: true
description: ''
schema:
$ref: '#/definitions/MyRequest'
responses:
'200':
description: OK
schema:
$ref: '#/definitions/MyResponse'
'400':
description: Bad request
schema:
$ref: '#/definitions/Errors'
definitions:
MyRequest:
type: object
properties:
some properties
Run Code Online (Sandbox Code Playgroud)
我尝试导入的文件保存到 exceptions.yaml(并保存到同一位置),看起来像:
swagger: '2.0'
info: …Run Code Online (Sandbox Code Playgroud) 我有一个用 Swagger 编写的 API,我想为其生成服务实现和客户端,并且它们必须位于单独的 maven 模块中。
我正在考虑将它们分成 3 个单独的 Maven 模块(或同一父 pom 的子模块)。
parent
+- api
+- src/main/resources/api/service.yaml
+- client
+- service
Run Code Online (Sandbox Code Playgroud)
然后在客户端和服务中我都会有swagger-codegen-maven-plugin. 这样两者都会同步,我只会在一个地方维护服务。其他客户端也可以依赖于api工件并从service.yamlSwagger API 定义生成它们的代码。
我的难点是如何让服务和客户端service.yaml在另一个 Maven 依赖项中引用?
这是我目前在 service 中所拥有的pom.xml,但它指的是 service 模块的本地资源,而不是apimaven 依赖项。
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>${io.swagger.codegen.version}</version>
<executions>
<execution>
<id>api</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- can this refer to another maven dependency's resources? -->
<inputSpec>${basedir}/src/main/resources/api/service.yaml</inputSpec>
<language>spring</language>
<library>spring-boot</library>
<modelPackage>com.test.model</modelPackage>
<apiPackage>com.test.api</apiPackage>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<java8>true</java8>
<dateLibrary>java8</dateLibrary>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration> …Run Code Online (Sandbox Code Playgroud) java maven swagger swagger-codegen swagger-codegen-maven-plugin
我正在使用 swagger codegen maven 插件从 swagger 规范生成服务器存根。如果我运行,mvn compile那么它会正确生成并编译项目。但是,有时我只想运行生成。
具体来说,我想避免编译整个项目并运行另一个在验证阶段运行的插件(checkstyles)。理想情况下,我想从 swagger 规范生成生成的类并编译这些类,而不是整个项目。
这里的用例是,在开发时,我可能需要更新规范并在整个项目无效(或不会,新规范)时重新生成。我读过你可以使用“前缀:目标”。我试过以下,但没有工作:
mvn swagger-codegen-maven-plugin:generate
mvn swagger-codegen:generate
mvn swagger:generate
mvn codegen:generate
Run Code Online (Sandbox Code Playgroud)
它给(例如)
在当前项目和存储库中可用的插件组 [org.apache.maven.plugins, org.codehaus.mojo] 中找不到前缀“codegen”的插件
我还读到您可以使用“groupid:artificatid:version_goal”,所以我尝试了:
mvn io.swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate
Run Code Online (Sandbox Code Playgroud)
这似乎更进一步,但给出了错误
无法执行目标 io.swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate (default-cli) on project com.carus.api.base:目标 io 的参数“inputSpec”、“language” .swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate 丢失或无效
我的 pom 结构有点复杂。有几个 API。每个人在某些方面都是自己的项目。它们有一个共同的父 pom 和执行目标,项目 pom 只设置某些变量。用作 inputSpec 的变量在项目 pom 中定义,但在基本 pom 中定义了语言。(这里提到的 .base 项目实际上是基础 pom 所在的位置,并且是一个抽象包 ( <packaging>pom</packaging>)。如果我指定一个特定的项目,我会得到同样的错误,但指的是该项目。
问题:
我最接近的是 run mvn generate-sources -Dcheckstyle.skip=true。这会生成,但我认为它不会编译生成的类。所以我必须在 Eclipse 中清理项目以触发它重新编译。
我必须从 yaml 文件生成代码,在我的 swagger maven 插件中:
<configOptions>
<java8>true</java8>
<sourceFolder>src/main/java</sourceFolder>
<interfaceOnly>true</interfaceOnly>
<dateLibrary>java8</dateLibrary>
<singleContentTypes>true</singleContentTypes>
</configOptions>
Run Code Online (Sandbox Code Playgroud)
即使它说 iinterfaceOnly>true 但是代码生成器生成一个具有默认实现的接口,如下所示:
@ApiOperation(value = "", nickname = "billetsFichiersHealthGet", notes = "Obtient l'état de santé de l'API. ", tags={ })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 200, message = "Erreur", response = Error.class) })
@RequestMapping(value = "/bills/health",
produces = "application/json",
consumes = "",
method = RequestMethod.GET)
default ResponseEntity<Void> billetsFichiersHealthGet() {
if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
} else {
log.warn("ObjectMapper or HttpServletRequest not configured …Run Code Online (Sandbox Code Playgroud) 我在组件模式中使用 OpenAPI 3.0 继承,并且我有由 openapi-generator(使用 Jackson)生成的(Java)类。
为什么鉴别器属性在生成的 JSON 中被序列化两次?
这是一个 JHipster API-First 项目,它应该使用 openapi-generator 来生成 Java 模型(带有 Jackson 注释的 POJO)和 API 控制器(与 Spring 的 @Api 注释的接口)。
通过遵循 OpenAPI 3.x 文档/示例,似乎discriminator还必须在properties架构列表中指定所使用的属性。
这样,生成的 Java 类似乎与带有注释的多态类型处理的 Jackson 指南(此处)不同,其中用作鉴别器的属性不能出现在类中。相反,生成的代码还包含此属性作为具有 getter/setter 的类属性。这会导致 JSON 输出两次包含该属性,如下所示。
我还尝试从 OpenAPIproperties列表中删除该属性,而保留完整的discriminator部分;这样生成的代码对应于杰克逊的指导方针,序列化工作得很好。另一方面,我在反序列化过程中遇到错误,因为在目标类中找不到(已删除)属性。
遵循 OpenAPI 3.x 文档指南:
TicketEvent:
type: object
description: A generic event
discriminator:
propertyName: type
required:
- id
- sequenceNumber
- timestamp
- type
properties:
id:
type: integer
format: int64 …Run Code Online (Sandbox Code Playgroud) 我有一个在输入和输出中都使用Noda Time类型的 API 。使用默认的 Noda Time 序列化格式(基本上是 ISO-8601 格式)将类型序列化为 JSON 中的字符串。
我有一个看起来像这样的对象:
public class NodaTimeDataStructure
{
public System.DateTime DateTime { get; set; }
public DateInterval DateInterval { get; set; }
public DateTimeZone DateTimeZone { get; set; }
public Duration Duration { get; set; }
public Instant Instant { get; set; }
public Interval Interval { get; set; }
public IsoDayOfWeek IsoDayOfWeek { get; set; }
public LocalDate LocalDate { get; set; }
public LocalDateTime LocalDateTime { get; set; …Run Code Online (Sandbox Code Playgroud) 我想从 SpringBoot Rest 服务在 Angular 应用程序中生成模型,为此我使用 ng-swagger-gen 插件。但不知何故,枚举仅作为内联字符串值生成,而不是作为 Enum 类生成,因此每次我必须自己键入字符串值或在 Typescript 中创建 Enum 对象时。
@Data
public class DummyClass {
private DummyEnum dummyEnum;
}
public enum DummyEnum {
One,
Two,
Three
}
Run Code Online (Sandbox Code Playgroud)
并且只生成 1 个代表模型的文件:
export interface DummyClass {
dummyEnum?: 'One' | 'Two' | 'Three';
}
Run Code Online (Sandbox Code Playgroud)
swagger 定义如下所示:
"definitions": {
"DummyClass": {
"type": "object",
"properties": {
"dummyEnum": {
"type": "string",
"enum": [
"One",
"Two",
"Three"
]
}
},
"title": "DummyClass"
}
}
Run Code Online (Sandbox Code Playgroud)
相反,当我手动将定义更改为此时,一切看起来都不错,生成了 2 个文件,1 个类和 1 …
在我们的 scala 应用程序中为枚举列表生成 swagger 文档时,生成的 swagger 定义只是空对象。为枚举生成 swagger 文档时,一切都按预期进行,仅在处理枚举列表时才如此。
在 scala 中有多种创建枚举的方式,我们的代码库使用这种方式:
sealed trait AnswerEnum { val value: String }
case object YES extends AnswerEnum { val value = "YES" }
case object NO extends AnswerEnum { val value = "NO" }
Run Code Online (Sandbox Code Playgroud)
假设我们有一个 API,它只有一个端点,预期请求看起来像这样:
case class SomeRequest(answers: Seq[AnswerEnum])
Run Code Online (Sandbox Code Playgroud)
我们想要产生一些招摇,所以我们注释它,它看起来像这样:
@ApiModel(description = "Example Request")
case class SomeRequest(
@ApiModelProperty(value = "List of answers", required = true) answers: Seq[AnswerEnum]
)
Run Code Online (Sandbox Code Playgroud)
然后在我们的 swagger 中留下一个定义,如下所示:
"AnswerEnum": {
"type": "object"
}
Run Code Online (Sandbox Code Playgroud)
虽然我们希望得到的是这样的:
"AnswerEnum": {
"type": "string", …Run Code Online (Sandbox Code Playgroud) 再会,
我已经通过我的 GitLab ci pipline 中的 swagger-codegen-cli (v3) docker 映像为 Shopware 6 商店生成了一个 python 客户端。
我遇到的问题是每个端点都返回空数据,但奇怪的是,当我调试客户端时,我可以通过检查器看到数据,但是在返回数据之前的一个步骤中,它尝试反序列化数据并返回里面没有任何数据的字典。
return_data = response_data
if _preload_content:
# deserialize response data
if response_type:
return_data = self.deserialize(response_data, response_type)
Run Code Online (Sandbox Code Playgroud)
这是从__call_api()函数。当我检查 response_data 时,我可以看到它包含我需要的数据,但 deserialize() 返回:
{'data': None, 'included': None, 'links': None, 'meta': None}
我知道我可以将参数 _preload_content 设置为 false,但随后我将原始请求响应作为字节字符串获取,这违背了使用 swagger 客户端的目的。
编辑:
我将问题缩小到__init__()所有继承自 Success 类的 Response 类的功能:
def __init__(self, data=None, links=None, *args, **kwargs): # noqa: E501
"""InlineResponse200156 - a model defined in Swagger""" # …Run Code Online (Sandbox Code Playgroud) swagger-codegen ×10
swagger ×8
enums ×3
java ×3
maven ×2
angular ×1
c# ×1
jackson ×1
maven-plugin ×1
nodatime ×1
nswag ×1
openapi ×1
python-3.x ×1
scala ×1
shopware ×1
swagger-2.0 ×1
swagger-codegen-maven-plugin ×1
traits ×1