给定一个Spring Boot项目,该项目使用springdoc-openapi库公开一个OpenAPI(Swagger)endpoint,该endpoint记录了项目的Spring MVC控制器endpoint。
项目中的一个枚举使用Jackson在字段上提供的JsonValue来更改枚举的JSON表示形式。使用Lombok项目的getter注释将此枚举字段公开为getter:
@Getter
public enum Suit {
HEARTS("Hearts"), DIAMONDS("Diamonds"), CLUBS("Clubs"), SPADES("Spades");
@JsonValue
private final String name;
Suit(String name) { this.name = name; }
}
然而,尽管Jackson表示基于字段,但OpenAPIendpoint返回的枚举表示使用枚举的值:
"suit": {
"type": "string",
"enum": [
"HEARTS",
"DIAMONDS",
"CLUBS",
"SPADES"
]
}
预期:
"suit": {
"type": "string",
"enum": [
"Hearts",
"Diamonds",
"Clubs",
"Spades"
]
}
基于springdoc openapi#1244和swagger core#3998,显然需要将注释应用于方法,而不是字段。然而,上述尝试的方法和以下方法均无效:
@Getter @JsonValue
public enum Suit {
HEARTS("Hearts"), DIAMONDS("Diamonds"), CLUBS("Clubs"), SPADES("Spades");
private final String name;
Suit(String name) { this.name = name; }
}
如何在Swagger中使用正确的值公开此枚举,同时仍使用Lombok生成getter?
解决方案是告诉Lombok在生成的getter方法上使用注释,在字段上使用getter(onMethod\u=@JsonValue)。
public enum Suit {
HEARTS("Hearts"), DIAMONDS("Diamonds"), CLUBS("Clubs"), SPADES("Spades");
@Getter(onMethod_ = @JsonValue)
private final String name;
Suit(String name) { this.name = name; }
}
onMethod
属性记录在@Getter和@Setter以及onX留档中:
要在生成的方法上添加注释,可以使用onMethod=@\uu({@AnnotationsHere})。[…]有关更多详细信息,请参阅有关onX功能的文档。
语法有点奇怪,这取决于您使用的javac
在javac7上,要使用3个onX功能中的任何一个,您必须将要应用于构造函数/方法/参数的注释包装在@(@annotationgoesher)中。若要应用多个批注,请使用({@Annotation1,@Annotation2})。注释本身显然也可以有参数
在javac8及以上版本中,可以在方法、参数或构造函数后添加下划线。
我正在使用swagger doc为我的应用程序生成API。doc是用yml编写的,在某些地方它将定义一些枚举道具(我们使用mysql)。这看起来像: 我希望得到这样的东西: 正如您所看到的,类型字段将是一个在配置文件中定义的字符串,但我收到的是这个字符串: Swagger将第一个值设置为数据类型,这是绝对错误的。所以问题是如何为“type”字段获取值“string”。
我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger 这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://loc
我正在编写一个OpenAPI(Swagger)定义,其中一个查询参数可以取无,或N个值,如下所示: 如何在OpenAPI YAML中编写此内容? 我尝试了以下方法,但没有产生预期的结果:
我希望能够使用此枚举定义: ...然而,在参数定义内部,我不断得到错误: 错误: Swager错误:不是有效的参数定义
我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。
我正在努力理解如何为API网关使用Swagger扩展: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html 我正在通过AWS CLI使用导入/导出RestAPI,但在命令行中找不到如何使用它们的任何示例。你能帮忙吗? 谢谢