我正在使用enunciate为REST API生成Swagger文档。我的一个遗留bean包含一个Map,Swagger抱怨这个:
[INFO] --- maven-enunciate-plugin:1.27:docs (default) @ foo-api ---
[INFO] initializing enunciate.
[INFO] invoking enunciate:generate step...
[WARNING] Validation result has errors.
/.../rest/BarBean.java:170: [swagger] Swagger isn't smart enough to handle anonymous types (such as maps).
public HashMap<String, BazBean> getBazBeans() {
是否有任何注释我可以放入bean类中,以便Swagger可以处理这个?
除此之外,有没有办法告诉Swagger简单地忽略这个领域或全班?我知道Swagger在没有@XmlRootElement
注释的情况下忽略了类,但BazBean
在另一个接受XML的端点中不幸地使用了。
答案 0 :(得分:2)
我可以想出两种解决问题的方法:
BarBean
@XmlJavaTypeAdapter
方法BarBean#getBazBeans()
注释
醇>
我将更详细地描述第二种解决方案,因为第一种解决方案是众所周知的。 getBazBeans()
的返回类型是匿名类型,这意味着它未在您的项目中声明。您可以使用javax.xml.bind.annotation.adapters.XmlAdapter
进行更改,并通过getBazBeans()
注释将其连接到javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
方法返回类型
import import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
public class BarBean {
@XmlJavaTypeAdapter( BazBeansAdapter.class )
Map<String, BazBean> getBazBeans() { /* ... */ }
}
public class BazBeansAdapter extends XmlAdapter<BazBeansContainer, Map<String, BayBean>> {
/*
Your implementation of serialization and deserialization.
Usually creating and reading the container object.
*/
}
public class BazBeansContainer {
private Map<String, BayBean> beans;
/* Getter, Setter, etc. */
}