Swagger不够聪明,无法处理匿名类型(如地图)

Jos*_*ver 11 java enunciate swagger swagger-ui

我正在使用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() {
Run Code Online (Sandbox Code Playgroud)

是否有任何注释我可以放入bean类中,以便Swagger可以处理这个?

除此之外,有没有办法让Swagger简单地忽略这个领域或全班?我知道Swagger在没有@XmlRootElement注释的情况下忽略了类,但是BazBean在另一个接受XML的端点中不幸地使用了它.

小智 2

我可以想到两种方法来解决这个问题:

  1. BarBean从您声明的 Maven 配置中排除遗留类
  2. @XmlJavaTypeAdapterBarBean#getBazBeans()方法添加注解

我将更详细地描述第二个解决方案,因为第一个解决方案是众所周知的。的返回类型getBazBeans()是匿名类型,这意味着它没有在您的项目中声明。您可以使用 an 更改此设置,通过注释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. */

}
Run Code Online (Sandbox Code Playgroud)