我试图在Swagger-ui中将String列表显示为枚举列表。
这是简化的Spring控制器代码:
@GetMapping(path = "/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
public DomainInfoResponseDto info(
@RequestHeader(name = ContextInfoDtoConverter.EXTENSIONS_HEADER, required = false)
Set<@EnumValidator(enumClass = EppExtensionVersion.class, message = ErrorValidatorConstants.UNKNOWN_EXTENSION) String> extensions) {
//...
}
这段代码产生了以下醒目的文档:
"/v1/domains/{name}": {
"get": {
"tags": [
"domain-epp-object-registry-controller"
],
"summary": "Get information on a Domain object",
"operationId": "infoUsingGET_1",
"produces": [
"application/json"
],
"parameters": [
{
"name": "Extensions",
"in": "header",
"description": "Extensions possible",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi",
"enum": [
"RGP_V1",
"TEST_V1"
]
},
但是如果我用Set<EppExtensionVersion> extensions
((EppExtensionVersion
是一个Java枚举)替换了控制器中的扩展参数的类型),那么swagger doc就会变成:
"/v1/domains/{name}": {
"get": {
"tags": [
"domain-epp-object-registry-controller"
],
"summary": "Get information on a Domain object",
"operationId": "infoUsingGET_1",
"produces": [
"application/json"
],
"parameters": [
{
"name": "Extensions",
"in": "header",
"description": "Extensions possible",
"required": false,
"type": "array",
"items": {
"type": "string",
"enum": [
"RGP_V1",
"TEST_V1"
]
},
"collectionFormat": "multi",
"enum": [
"RGP_V1",
"TEST_V1"
]
},
重要的部分是enum
字段中的附加items
字段。
这使swagger-ui会显示一个填充有允许值的组合列表,而不是空白字段的列表。
问题是,我不想在控制器中使用Java枚举集而不是字符串集,但是我想大张旗鼓地将其显示为枚举集。
您有实现的任何想法吗?我已经尝试了很多醒目的注解,但似乎没有任何效果。