【问题标题】:XML examples in springdoc-openapi, swagger UIspringdoc-openapi、swagger UI 中的 XML 示例
【发布时间】:2021-05-11 22:40:09
【问题描述】:

我正在努力在 springdoc-openapi 库中生成正确的 XML 示例。

控制器:

@RestController
@RequestMapping(produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public class MyController {
    @GetMapping
    public MonetaryValue getMonetaryValue() {
        return new MonetaryValue(BigDecimal.ONE, "EUR");
    }
}

型号

@Schema(name="price", description = "Monetary value")
@JacksonXmlRootElement(localName = "price")
public class MonetaryValue {
    @Schema(example = "EUR")
    @JsonProperty("cur")
    @JacksonXmlProperty(localName = "cur", isAttribute = true)
    private String currency;
    
    @Schema(example = "1.00")
    @JsonProperty("val")
    @JacksonXmlText
    private BigDecimal value;
    
    // getters, setter ...
}

使用标题Accept: application/xml 调用的端点返回预期结果:

<price cur="EUR">1</price>

但是,springdoc 中似乎忽略了 Jackson 注释。 swagger-ui 展示的例子:

<value>
    <cur>EUR</cur>
    <val>1</val>
</value>

我也尝试过添加 JAXB 注释。

@Schema(name="price", description = "Monetary value")
@JacksonXmlRootElement(localName = "price")
public class MonetaryValue {
        @Schema(example = "EUR")
    @JsonProperty("cur")
    @JacksonXmlProperty(localName = "cur", isAttribute = true)
    @XmlAttribute(name = "cur")
    private String currency;
    
    @Schema(example = "1.00")
    @JsonProperty("val")
    @JacksonXmlText
    @XmlValue
    private BigDecimal value;   
    // getters, setter ...
}

它有部分帮助,属性显示正确,但@XmlValue 注释似乎被忽略了。值显示在子元素 val 而不是元素的文本中。

<value cur="EUR">
    <val>1</val>
</value>

JSON 示例可以正常工作。

Demo project on GitHub.

感谢您的帮助。

【问题讨论】:

    标签: java springdoc-openapi-ui


    【解决方案1】:

    这是 OpenAPI 规范的一个问题。

    <value cur="EUR">1</value>
    

    OpenAPI 不支持您要实现的 XML 结构。

    有一个 GitHub 问题跟踪此问题:https://github.com/OAI/OpenAPI-Specification/issues/630

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2022-10-25
      • 1970-01-01
      • 2021-06-03
      • 2021-03-03
      • 1970-01-01
      • 2021-05-07
      • 2020-12-19
      • 2022-08-19
      相关资源
      最近更新 更多