При создании документации swagger для списков перечислений в наших приложениях scala генерируемые определения swagger являются только пустыми объектами. При создании документации по перечислениям для перечислений все происходит так, как ожидалось, только при работе со списками перечислений.
В Scala есть несколько способов создания перечислений, наша кодовая база использует этот способ:
sealed trait AnswerEnum { val value: String }
case object YES extends AnswerEnum { val value = "YES" }
case object NO extends AnswerEnum { val value = "NO" }
Если мы представим, что у нас есть API, у которого есть только одна конечная точка, где ожидаемый запрос выглядит примерно так:
case class SomeRequest(answers: Seq[AnswerEnum])
И мы хотим сгенерировать какое-то чванство, поэтому мы аннотируем его так, чтобы оно выглядело так:
@ApiModel(description = "Example Request")
case class SomeRequest(
@ApiModelProperty(value = "List of answers", required = true) answers: Seq[AnswerEnum]
)
Затем у нас есть определение в нашем чванстве, которое выглядит следующим образом:
"AnswerEnum": {
"type": "object"
}
В то время как мы ожидаем получить что-то вроде этого:
"AnswerEnum": {
"type": "string",
"description": "",
"enum": ["YES", "NO"]
}
Если мы попытаемся аннотировать вышеупомянутую запечатанную черту следующим образом:
@ApiModel(description = "Enum for Yes/No answers")
sealed trait AnswerEnum {
val value: String
@ApiModelProperty(value = "Yes/No Answers", dataType = "string", allowableValues = "YES, NO")
def getAnswerEnum: String = value
}
В итоге мы получим определение чванства, которое смотрит ближе к тому, что мы хотим, а не к тому, как мы этого хотим или каким оно должно быть:
"AnswerEnum": {
"type": "object",
"properties": {
"AnswerEnum": {
"type": "string",
"description": "Yes/No Answers",
"enum": ["YES", "NO"]
}
},
"description": "Enum for Yes/No answers"
}
Это самое близкое, что мы получили, чтобы получить это правильно, но это все еще очень плохо и совсем не правильно.
Если мы делаем что-то подобное, мы в конечном итоге получаемнаштекущее решение, которое не является хорошим решением, но оно работает:
@ApiModel(description = "Example Request")
case class SomeRequest(
@ApiModelProperty(value = "List of answers", dataType = "[Ljava.lang.String;", required = true, allowableValues = "YES, NO") answers: Seq[AnswerEnum]
)
Сгенерированный чванство для SomeRequest, по крайней мере, несколько правильно, в том смысле, что он генерирует что-то, что говорит, что ответы являются списком строк,но это не говорит, что это перечисление с допустимыми значениями, однако это выглядит так:
"SomeRequest": {
"type": "object",
"required": [
"answers"
],
"properties": {
"answers": {
"type": "array",
"description": "List of answers",
"items": {
"type": "string"
}
}
},
"description": "Example Request"
}
Мы используем
для генерации чванства.