我在设置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似乎不适用于这种情况。有人知道如何解决这个问题吗?