swagger 非属性(内联)文本值的OpenAPI注解

svmlkihl  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(147)

假设我想建立以下模型:

<?xml version="1.0" encoding="UTF-8"?>
<something>
    <entry value="foo">some text</entry>
    <entry value="bar">some other text</entry>
</something>

有了这种造型:

@XmlRootElement(name = "something")
public class Something {

  @Schema(name = "entry")
  @JacksonXmlProperty(localName = "entry")
  @JacksonXmlElementWrapper(useWrapping = false)
  List<Entry> entries = new ArrayList<>();
}

public class Entry {

  @XmlAttribute
  String value;

  @JacksonXmlText
  String inlineTxt;
}

我对@JacksonXmlText的使用显然是不够的,因为当我按下Try it out时,Swagger为我生成了以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<something>
    <entry value="string">
        <inlineTxt>string</inlineTxt>
    </entry>
</something>

然而,当我接收到以我想要建模的方式形成的对象时,Jackson正确地完成了工作。(getter和诸如此类的东西是由Lombok生成的,为了简洁起见,这里没有显示其他注解。)

如何让OpenAPI生成一个没有这些<inlineTxt>标记的示例对象?

rhfm7lfc

rhfm7lfc1#

OpenAPI规范does not support XML元素,包含属性和文本,例如

<entry value="foo">some text</entry>

这意味着您的XML结构不能使用OpenAPI和相关的Java注解来表示。

vvppvyoh

vvppvyoh2#

对于我的项目工作这个例子:

ttlIntrBkSttlmAmt:
      type: string
      xml:
        name: TtlIntrBkSttlmAmt
      allOf:
        - $ref: '#AmountMoreZero'

在pom.xml中添加导入:

<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.1.0</version>
<executions>
    <execution>
        <configuration>
            ...
            <importMappings>
                <importMapping>AmountMoreZero=com.example.iso20022.http.v1.schema.AmountMoreZero</importMapping>
            </importMappings>
            ...
        </configuration>
    </execution>
</executions>

然后在命名空间com.example.iso20022.http.v1.schema.AmountMoreZero中创建此文件:

public class AmountMoreZero  implements Serializable {
    @JsonProperty("ccy")
    @JacksonXmlProperty(isAttribute = true, localName = "Ccy")
    private String ccy;

    @JacksonXmlText
    BigDecimal value;
}

相关问题