11

我正在使用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 的端点中使用。

4

1 回答 1

2

我可以想到两种解决问题的方法:

  1. BarBean从您的 Maven 配置中排除遗留类
  2. 给方法添加@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. */

}
于 2014-08-24T20:08:11.603 回答