#spring-boot #maven #jax-rs #swagger-ui #openapi
#spring-boot #maven #jax-rs #swagger-ui #openapi
Вопрос:
У меня есть приложение SpringBoot, JAX-RS и Maven. Я использую аннотации Swagger для предоставления информации об интерфейсе службы REST. В принципе это работает, но у меня возникли проблемы с некоторыми параметрами, которые, как я ожидаю, имеют ограниченный набор значений. Я полагаю, что я правильно указываю аннотации «@Api …», и я вижу ожидаемые результаты в файле swagger.json, но swagger-ui, похоже, ничего не делает с этой информацией.
Мой pom.xml появляется, чтобы указать версию 1.5.20 артефактов swagger.
Ниже приведен сильно опущенный отрывок из интерфейса Java:
@GET
@Path("...")
@ApiOperation("...")
@ApiImplicitParams({
...
@ApiImplicitParam(name = "poi_types", value = "Types of locations to include",
allowableValues = "pos, wifi, country",
dataType = "string", paramType = "query"),
...
})
public Object ...(@QueryParam(...)
@ApiParam(name = ..., value = "...")
String ...) {
В swagger.json я вижу следующее для этой записи:
{
"name" : "poi_types",
"in" : "query",
"description" : "Types of locations to include",
"required" : false,
"type" : "string",
"enum" : [ "pos", "wifi", "country" ]
}
В сгенерированном пользовательском интерфейсе я вижу следующее:
Я где-то видел некоторые упоминания о возможных разрывах между требуемой схемой и тем, что отображает swagger-ui, например, возможно, требуется элемент «schema» в определении параметра, который включает свойства «type» и «enum». Я попытался вручную изменить swagger.json, чтобы включить это, но это не имело никакого значения.
Может ли кто-нибудь предоставить здесь какую-либо информацию?
Обновить:
Я обновился до версии v1.6.2 swagger-core и swagger-annotations. Я также попытался поместить «Разрешенные значения» в «@ApiParam» вместо простого «@ApiImplicitParam». Ни одно из этих изменений не имело никакого значения. Я не вижу никаких указаний в пользовательском интерфейсе допустимых значений.
Это измененный элемент из-за изменения @ApiParam:
{
"name" : "isocc2",
"in" : "query",
"description" : "Country code",
"required" : false,
"type" : "string",
"enum" : [ "en", "es" ]
}
Вот как это отображается в пользовательском интерфейсе swagger:
Я также проверил из браузера загруженный файл swagger.json, и он соответствует тому, что я ожидал.
На всякий случай я протестировал его в Chrome в дополнение к Firefox.
Что еще здесь может быть не так?
Комментарии:
1. предлагаю вам использовать последнюю версию swagger.
2. Я попробовал это в последней версии openapi 2.x, которая 1.6.2, и это не имело никакого значения.
3. Я думаю, что у нас отсутствуют некоторые банки. Пожалуйста, проверьте, нужно ли также изменять аннотации в новой версии??
4. Возможно, вам следует перефразировать это.
Ответ №1:
Вы пробовали использовать?
public Object ...(@QueryParam(...)
@ApiParam(name = ..., value = "...",
allowableValues = "pos, wifi, country",)
String poi_types) {
allowableValues
свойство хорошо работает на @ApiParam.
Комментарии:
1. Итак, вы говорите, что это работает для @ApiParam, но не для @ApiImplicitParam? В документах четко указано, что он поддерживается.
2. И я только что попробовал это, и это не работает, по крайней мере, с версией 1.6.2 swagger- *.
3. Я получил это, работая с springfox-2.9.2 и 3.0.0, в которых используется swagger версии 1.5.20 : (