如何在Swagger中描述多态端点?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swagger中描述多态端点?相关的知识,希望对你有一定的参考价值。
我们使用Spring + Jackson(Java)。在我们的API中,我们可以将不同的对象发送到同一个端点。例如
@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中描述多态端点?
我和你一样有同样的问题。不幸的是,swagger-ui现在不支持。你可以在github上看到讨论。他们已就此开了几个问题。虽然昂首阔步仍然无法提供这一功能。它确实有一个解决方法,github上提到的人,也许你可以尝试一下。
ringgelerch于8月10日评论
这对我们来说也是一个非常重要的特征。我们目前使用一种解决方法:
对于GET方法,我们定义了多个响应,如“200 Cat”和“200 Dog”。对于PUT和POST,我们使用不同的路径,如“path / to / animals / animal(Cat)”。为了使用swagger ui的“试用”功能,我们使用有效路径“path / to / animals / animal”创建了PUT和POST。要发送请求,只需将Cat PUT或POST中的正文内容复制到通用内容。
很高兴看到鉴别器很快得到支持,因为上面的解决方法我们的api规范很难维护,渲染的ui也不容易阅读。
链接在这里 https://github.com/swagger-api/swagger-ui/issues/2438或https://github.com/swagger-api/swagger-ui/issues/1526
以上是关于如何在Swagger中描述多态端点?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Springfox 从 Swagger 文档中隐藏端点
是否有 Maven 插件可以从 swagger 端点生成客户端代码?
如何在 Swagger-ui 中显示 Spring Security 用户名密码身份验证过滤器 url?
如何在整个 Swagger YAML 文档中重复使用我的 x-amazon-apigateway-integration 定义?