2017-07-31 37 views
0

我们使用Spring + Jackson(Java)。在我们的API中,我们可以发送不同的对象到同一个端点。 例如如何描述Swagger中的多态端点?

@JsonTypeInfo(
     use = JsonTypeInfo.Id.NAME, 
     include = As.PROPERTY, 
     property = "type") 
    @JsonSubTypes({ 
     @JsonSubTypes.Type(value = Dog.class, name = "dog"), 
     @JsonSubTypes.Type(value = Cat.class, name = "cat") 
    }) 
    public static class Animal { 
    } 

    @JsonTypeName("dog") 
    public static class Dog extends Animal { 
     public double barkVolume; 
    } 

    @JsonTypeName("cat") 
    public static class Cat extends Animal { 
     boolean likesCream; 
     public int lives; 
    } 

@Controller 
public class MyController { 

    //REST service 
    @RequestMapping(value = "test") 
    public @ResponseBody String save(@RequestBody Animal animal){ 
     System.out.println(animal.getClass()); 
     return success; 
    } 
} 

发送到/测试

{ 
    "type": "dog", 
    "barkVolume": 23.3 
} 

将显示Dog.class

发送到/测试

{ 
    "type": "cat", 
    "likesCream": true, 
    "lives": 42 
} 

将显示Cat.class

如何描述Swagger中的多态端点?

回答

0

我有和你一样的问题。不幸的是,swagger-ui现在不支持这一点。 你可以在github上看到讨论。他们已经就此开了几个问题。虽然招摇仍然无法提供该功能。它的确有一个解决方法,有人在github上提到过,也许你可以试试看。

ringgelerch评论08月10日

这对我们来说是一个非常重要的功能,以及。我们现在使用一种解决方法:

对于GET方法,我们定义了多个响应,如“200 Cat”和“200 Dog”。 对于PUT和POST,我们使用不同的路径,如“路径/到/动物/动物(猫)”。要使用swagger ui的“试用”功能,我们使用有效路径“path/to/animals/animal”创建了PUT和POST。要发送请求,只需将主体内容从Cat PUT或POST复制到通用的内容。

很快就会看到鉴别器的支持,因为上面的解决方法我们的api规格很难维护,并且呈现的ui不容易阅读。

的链接在这里
https://github.com/swagger-api/swagger-ui/issues/2438https://github.com/swagger-api/swagger-ui/issues/1526