Openapi 生成器不生成@XmlAttribute/@XmlElement 注释
Openapi generator does not generate @XmlAttribute/@XmlElement annotations
我目前正在摆弄 openapi 并尝试创建一个使用 XML 文件的端点。然而,当使用 openapi 创建模型时,我以前使用的所有 XML 注释似乎都丢失了。这是我正在使用的openapi.yaml。
openapi: 3.0.1
info:
version: "1.1"
title: xml test
description: some xml test
servers:
- url: 'http://localhost/:8080'
paths:
'/test':
put:
operationId: testMethodNaming
requestBody:
content:
'application/xml':
schema:
$ref: '#/components/schemas/MyRequest'
responses:
'200':
description: 'OK'
components:
schemas:
MyRequest:
type: object
properties:
name:
type: string
xml:
attribute: true
MyRequest
模式是现在的问题。请注意,我将名称 属性 声明为 XML 属性。生成的 class 看起来像这样:
/**
* MyRequest
*/
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2019-03-12T15:32:37.070386+01:00[Europe/Berlin]")
public class MyRequest {
@JsonProperty("name")
private String name;
public MyRequest name(String name) {
this.name = name;
return this;
}
/**
* Get name
* @return name
*/
@ApiModelProperty(value = "")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
MyRequest myRequest = (MyRequest) o;
return Objects.equals(this.name, myRequest.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class MyRequest {\n");
sb.append(" name: ").append(toIndentedString(name)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
我使用 spring-boot 生成器生成了这个。我原以为 @XmlAttribute
注释会出现在名称字段上方。我还期望在 class 之上会有一个 @XmlRootElement
。
出于某种原因,我现在无法 运行 生成的代码,但似乎如果我将 <MyRequest name="foobar">
发送到端点,它将无法使用该模型解析它。
我是否遗漏了一些配置选项或任何东西,所以它生成了正确的注释?
查看 openapi 的源代码,需要的注释就在那里
我越来越清楚:现在,OpenAPITools 的生成器以及它的父亲 SwaggerCodeGen 将 json 作为主要目标格式。 Xml 确实得到了支持,但更多的是作为一种选择,坦率地说非常糟糕。
我最近发现了 3 个错误:
- https://github.com/swagger-api/swagger-codegen/issues/9052
- https://github.com/OpenAPITools/openapi-generator/issues/2240
- https://github.com/OpenAPITools/openapi-generator/issues/2243
为了让它工作,我必须自己定制各种 mustache templates 以获得正确的 xml 注释。第一期中描述了解决方法。
重要提示:还要确保 withXml
选项已激活,以便小胡子 Pojo 模板将生成所需的 xml 注释。
祝你好运。
我目前正在摆弄 openapi 并尝试创建一个使用 XML 文件的端点。然而,当使用 openapi 创建模型时,我以前使用的所有 XML 注释似乎都丢失了。这是我正在使用的openapi.yaml。
openapi: 3.0.1
info:
version: "1.1"
title: xml test
description: some xml test
servers:
- url: 'http://localhost/:8080'
paths:
'/test':
put:
operationId: testMethodNaming
requestBody:
content:
'application/xml':
schema:
$ref: '#/components/schemas/MyRequest'
responses:
'200':
description: 'OK'
components:
schemas:
MyRequest:
type: object
properties:
name:
type: string
xml:
attribute: true
MyRequest
模式是现在的问题。请注意,我将名称 属性 声明为 XML 属性。生成的 class 看起来像这样:
/**
* MyRequest
*/
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2019-03-12T15:32:37.070386+01:00[Europe/Berlin]")
public class MyRequest {
@JsonProperty("name")
private String name;
public MyRequest name(String name) {
this.name = name;
return this;
}
/**
* Get name
* @return name
*/
@ApiModelProperty(value = "")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
MyRequest myRequest = (MyRequest) o;
return Objects.equals(this.name, myRequest.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class MyRequest {\n");
sb.append(" name: ").append(toIndentedString(name)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
我使用 spring-boot 生成器生成了这个。我原以为 @XmlAttribute
注释会出现在名称字段上方。我还期望在 class 之上会有一个 @XmlRootElement
。
出于某种原因,我现在无法 运行 生成的代码,但似乎如果我将 <MyRequest name="foobar">
发送到端点,它将无法使用该模型解析它。
我是否遗漏了一些配置选项或任何东西,所以它生成了正确的注释?
查看 openapi 的源代码,需要的注释就在那里
我越来越清楚:现在,OpenAPITools 的生成器以及它的父亲 SwaggerCodeGen 将 json 作为主要目标格式。 Xml 确实得到了支持,但更多的是作为一种选择,坦率地说非常糟糕。 我最近发现了 3 个错误:
- https://github.com/swagger-api/swagger-codegen/issues/9052
- https://github.com/OpenAPITools/openapi-generator/issues/2240
- https://github.com/OpenAPITools/openapi-generator/issues/2243
为了让它工作,我必须自己定制各种 mustache templates 以获得正确的 xml 注释。第一期中描述了解决方法。
重要提示:还要确保 withXml
选项已激活,以便小胡子 Pojo 模板将生成所需的 xml 注释。
祝你好运。