带有xml响应的Springfox API文档 - @XmlAttribute的解决方法

时间:2018-02-21 10:53:41

标签: jackson jaxb swagger-ui springfox

我在设置Springfox以在Swagger UI中使用时遇到了一些问题。 我得到了它的一般工作,但是创建的XML示例部分错误,因为springfox不考虑某些xml annoations。

我有这些模特:

@XmlRootElement(name = "ApplicatorUnits")
@XmlAccessorType(XmlAccessType.FIELD)  
public class EHDTOApplicatorUnits
{
    @XmlElement(name = "UnitGroup")
    private List<EHDTOUnitGroup> ehdtoUnitGroups;

    public List<EHDTOUnitGroup> getEhdtoUnitGroups()
    {
        return ehdtoUnitGroups;
    }

    public void setEhdtoUnitGroups(List<EHDTOUnitGroup> ehdtoUnitGroups)
    {
        this.ehdtoUnitGroups = ehdtoUnitGroups;
    }
}

@XmlRootElement(name = "UnitGroup")
@XmlAccessorType(XmlAccessType.FIELD)  
public class EHDTOUnitGroup
{
    @XmlAttribute(name = "name")
    private String name;

    @XmlElement(name = "unit")
    private List<EHDTOUnit> ehdtoUnits;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public List<EHDTOUnit> getEhdtoUnits()
    {
        return ehdtoUnits;
    }

    public void setEhdtoUnits(List<EHDTOUnit> ehdtoUnits)
    {
        this.ehdtoUnits = ehdtoUnits;
    }
}

您会看到@XmlAttribute,@ XromRootElement和@XmlElement的一些用法。 添加jackson jaxb注释内省(我尝试了不同的方法)后,XML部分正确,因为在此步骤之后已经考虑了@XmlAttribute注释:

JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
jaxbAnnotationModule.setPriority(Priority.PRIMARY);
mapper.registerModule(jaxbAnnotationModule);
/*AnnotationIntrospector primary = new JacksonAnnotationIntrospector();
AnnotationIntrospector secondary = new XmlJaxbAnnotationIntrospector(mapper.getTypeFactory()); //new JaxbAnnotationIntrospector(mapper.getTypeFactory());
AnnotationIntrospector pair = new AnnotationIntrospectorPair(primary,secondary);
mapper.setAnnotationIntrospector(pair);*/

但是,其他2仍然被忽略,导致这个例子是xml:

<?xml version="1.0"?>
<EHDTOApplicatorUnits>
  <UnitGroup>
    <name>string</name>
    <unit>
      <id>1</id>
      <name>string</name>
      <unitSystem>string</unitSystem>
    </unit>
  </UnitGroup>
</EHDTOApplicatorUnits>

虽然API的实际输出是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ApplicatorUnits>
  <UnitGroup name="coefTempErrorSpan">
    <unit>
      <id>1</id>
      <name>% span /10K</name>
      <unitSystem>SI</unitSystem>
    </unit>
    <unit>
      <id>2</id>
      <name>% span /50F</name>
      <unitSystem>SI</unitSystem>
    </unit>
  </UnitGroup>
...
</ApplicatorUnits>

您会看到根元素的不同命名,以及UnitGroup的“名称”,它不是示例xml中的属性,而是一个自己的子节点。

我发现我可以使用@ApiModel(value =“ApplicatorUnits”)作为@XmlRootElement的解决方法但是@XmlAttribute呢,还有一个解决方法吗? @ApiModelProperty似乎不适用于这种情况。有人知道如何解决这个问题吗?

0 个答案:

没有答案