2015-04-14 26 views
1

我將Swagger添加到現有項目中以生成文檔。它大多工作得很好,但有一些邊緣案例產生了一些奇怪的文檔,我想知道是否有辦法處理它們。在Swagger中處理與仿製藥相關的特殊病例

一個Web方法將泛型類型的工作,看起來像這樣:

public abstract class AbstractServiceClass<T> 
{ 
    @ApiOperation(value="blah blah",tags={ "Generic methods"}) 
    @Path("/doGenericThing") 
    @POST 
    @Consumes({ "application/xml", "application/json" }) 
    @Produces({ "application/xml", "application/json" }) 
    public T doGenericThing(@ApiParam T entity) 
    { 
    //... 
    } 
} 

@Api(value="/a.b.c") 
@Path("a.b.c") 
public class ConcreteService extends AbstractServiceClass<SomeEntityType>{ 
//... 
} 

當招搖生成ConcreteService的文檔,它的方法doGenericThing生成的文檔,但無法確定該參數類型爲SomeEntityType。當它產生具體服務類的文檔時,是否有辦法告訴Swagger關於繼承方法的參數類型?

我有類似的情況,他的泛型方法只能在某些實體上工作。這些實體具有應用於它們的自定義註釋,並且代碼能夠確定給定的輸入是否可以處理。有沒有辦法讓swagger在某些標記爲@Api的服務類中不爲繼承方法生成方法文檔?

我對Swagger比較陌生,我不確定它是否能夠處理這些場景。我願意添加映射文件,甚至可以擴展API(如果有合理的和有文檔記錄的方式來執行此操作)來添加此自定義功能。重寫這些類讓Swagger更容易消化,這可能不是一個好的選擇。

回答

0

我建議在https://github.com/swagger-api/swagger-core/issues上打開一個問題來跟蹤這個問題。由於在運行時讀取實現無法克服的類型擦除,肯定存在限制。

+0

好的。我不確定它是否應該*起作用。我意識到類型擦除可能會導致某些情況下的問題,我不確定是否我的第一個問題是這些情況之一。我不知道其他人,但我似乎越來越頻繁地看到這些類型的通用Web服務。代碼庫比較小並且易於使用,但顯然這種通用方法會導致像Swagger這樣的工具出現問題。 – FrustratedWithFormsDesigner

+0

是的,由於類型擦除,在運行時支持泛型非常困難。有技巧,但他們會影響實施技術。 – fehguy