У меня есть следующий объект ответа.
data class SomeResponse(
val progressUri: URI,
val productUrls: Map<SomeEnumKey, URI>
) {
Ответ, который создает Джексон:
{
"progressUri": "http://blah.com",
"productUrls": {
"prod1": "http://prod1.blah.com"
}
}
Итак, чтобы получить чванство, сделайте c для соответствия ответу, Мне нужно преобразовать URI в String. Моя конфигурация swagger определяется следующим образом:
@Bean
fun createDocket(
@Value("\${info.app.name}") applicationName: String,
@Value("\${info.app.version}") applicationVersion: String
): Docket {
return Docket(DocumentationType.SWAGGER_2)
.apiInfo(ApiInfoBuilder()
.title(applicationName)
.version(applicationVersion)
.build()
)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api::class.java))
.paths(PathSelectors.any())
.build()
.directModelSubstitute(URI::class.java, String::class.java)
}
Кажется, это создает правильное сопоставление для progressUri, но не productUrls. Файл swagger, сгенерированный для указанного выше класса: -
"SomeResponse": {
"type": "object",
"required": [
"productUrls",
"progressUri"
],
"properties": {
"productUrls": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/URI" # booo!
}
},
"progressUri": {
"type": "string" # yay!
}
},
"title": "SomeResponse"
}
В частности, он не только не преобразует тип карты из URI в String, но и не может сгенерировать "$ ref": " # / definitions / URI " в любом месте документа. Посещение / swagger-ui. html и проверка этого объекта дает следующую ошибку: -
Resolver error at paths./api/blah.post.responses.200.schema.properties.productUrls.additionalProperties.$ref
Could not resolve reference because of: Could not resolve pointer: /definitions/URI does not exist in document
Как я могу определить замену для объекта, которая также применяется, когда этот объект общий c тип карты / списка et c?
В конечном итоге я могу обновить объекты ответа, чтобы просто вернуть String, но я хотел бы иметь возможность решить эту проблему с помощью конфигурации.