Java swagger-ui не отображает допустимые значения для параметра

#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-выдержка из пользовательского интерфейса для poi_types

Я где-то видел некоторые упоминания о возможных разрывах между требуемой схемой и тем, что отображает 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 : (