2013-11-18 4 views
11

Я использую enunciate для генерации Swagger документации для REST API. Один из моих старых бобах содержит карту, и Кураж жалуется на это: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() { 

Есть ли какая-либо аннотация я могу упасть в класс компоненты, так что Кураж может справиться с этим?

Запрет на то, есть ли способ сказать Свальгеру просто игнорировать поле или весь класс? Я знаю, что Swagger игнорирует классы без аннотации @XmlRootElement, но BazBean трагически используется в другой конечной точке, которая принимает XML.

ответ

2

я могу думать о двух способах обойти проблемы:

  1. Exclude унаследованного класса BarBean от конфигурации Maven излагает
  2. Добавить @XmlJavaTypeAdapter аннотацию к BarBean#getBazBeans() методе

I будет описывать второе решение более подробно, потому что первое хорошо известно. Тип возврата 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. */ 

} 
+0

Почему BazBeansContainer все еще имеет unmappable карту класса ? – jiwhiz