【问题标题】:OpenAPI annotation for Xml WrappedXml Wrapped 的 OpenAPI 注释
【发布时间】:2021-01-20 20:22:56
【问题描述】:

假设我想对此建模:

<?xml version="1.0" encoding="UTF-8"?>
<something>
    <list>
        <entry value="bob" />
        <entry value="foo" />
    </list>
</something>

通过这种建模(getter 和 what-not 是用 Lombok 生成的,但为了简洁起见,我省略了这些细节):

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

  @ArraySchema(
    arraySchema = @Schema(name = "list"),
    schema = @Schema(implementation = Entry.class, name = "entry")) // this obviously doesn't work
  List<Entry> entries = new ArrayList<>();
}


public class Entry {

  @XmlAttribute
  String value;
}

我对 @ArraySchema 的使用显然是错误的,因为这是 Swagger 在我按下 Try it out 时为我生成的:

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

文档提到了xml/wrappedthis SO answer 也提到了,但我在任何地方都找不到有关如何使用注释注入此类信息的信息。

【问题讨论】:

    标签: java xml swagger openapi


    【解决方案1】:

    我最近遇到了同样的要求,我为我的 Spring Boot 应用程序找到了一个可行的解决方案(尽管我认为这只是一种解决方法)。

    使用的版本:

    org.springframework.boot:spring-boot-starter-web:2.5.5
    org.springdoc:springdoc-openapi-ui:1.5.11
    

    如果你像下面这样注释你的类/字段,你应该得到想要的结果。

    @XmlRootElement(name = "something")
    public class Something {
    
      @XmlElementWrapper(name = "list")
      List<Entry> entries = new ArrayList<>();
    }
    
    @XmlRootElement(name = "entry")
    public class Entry {
    
      @XmlAttribute
      String value;
    }
    

    这里重要的部分是@XmlElementWrapper(name = "list"),它提供了包装器元素。 @XmlRootElement(name = "entry") 也是必须的,否则“item 元素”将没有正确的名称。


    编辑: 我刚刚看到提到“试试看”。如果您的 API 响应未正确转换(我假设使用 com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.5)而不是 Swagger UI 中的 Schema,您可能还需要添加 Jackson 注释:

    @XmlRootElement(name = "something")
    public class Something {
    
      @JacksonXmlElementWrapper(localName = "list")
      @JacksonXmlProperty(localName = "entry")
      @XmlElementWrapper(name = "list")
      List<Entry> entries = new ArrayList<>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多