Как я могу игнорировать PathVariable условно в пользовательском интерфейсе swagger с помощью springdoc openapi

Я перехожу с springfox 2.9.0 на springdoc-openapi-ui 1.2.33. У меня есть требование показать или скрыть PathVariable в пользовательском интерфейсе swagger в зависимости от условия. У меня есть два пути, как показано ниже

  1. Строка nameIdentifier = "{fisrtName} / {lastName}"

  2. Строка nameIdentifier = "{fisrtName}"

Я передаю одно из указанных выше nameIdentifier в соответствии с требованиями.

Я использую один контроллер для указанных выше путей, как показано ниже.

@GetMapping(path = "persons/${nameIdentifier}/display")
public List<Person> getPersons(@PathVariable String fisrtName,
    @IgnoreLastName @PathVariable Optional<String> lastName) {

}

В springfox мне удалось добиться этого, используя docket.ignoredParameterTypes(IgnoreLastName.class), как показано ниже.

@Bean
public Docket api() {

    Docket docket;

    docket = new Docket(DocumentationType.SWAGGER_2).select()                
     .apis(RequestHandlerSelectors.basePackage("go.controller")).paths(PathSelectors.any()).build()
                .apiInfo(apiInfo());

        if (!nameIdentifier.contains("lastName")) {
            docket.ignoredParameterTypes(IgnoreLastName.class);
        }
        return docket;
    }

Но в springdoc open api я не могу добиться того же. Ваша помощь ценится в том же. Кодирование выполняется на java

Спасибо


person SSK    schedule 06.03.2020    source источник


Ответы (1)


Вы можете использовать аннотации @Hidden swagger или @Parameter(hidden = true).

Если вы не можете перейти на уровень параметров, вы можете установить его глобально: вам нужно будет обновить springdoc-openapi-ui до v1.3.0.

static {
    SpringDocUtils.getConfig().addAnnotationsToIgnore(IgnoreLastName.class);
}
person brianbro    schedule 15.03.2020
comment
Мы не можем программно передать значение в hidden @Parameter (hidden = true / false (в зависимости от условия)) - person SSK; 15.03.2020
comment
Используйте: SpringDocUtils.getConfig (). AddAnnotationsToIgnore (IgnoreLastName.class) с v1.2.34. - person brianbro; 18.03.2020
comment
Привет, @brianbro, спасибо за ваше время и решение. Я попытался добавить вышеуказанное решение, но оно не работает должным образом. `` статическая строка nameIdentifier = / {fisrtName}; статический {если (! nameIdentifier.contains (lastName)) {SpringDocUtils.getConfig (). addAnnotationsToIgnore (IgnoreLastName .class); }} `` `но все же он показывает lastName в разделе параметров в пользовательском интерфейсе swagger как обязательный параметр и не скрывает его. Я попытался добавить приведенный выше код в свой класс конфигурации - person SSK; 18.03.2020
comment
Привет, @Shilanand, я обновился до нужной версии: v1.3.0. В этой версии PathVariable также можно игнорировать, если они имеют правильную аннотацию. Например; SpringDocUtils.getConfig (). AddAnnotationsToIgnore (IgnoreLastName.class) - person brianbro; 21.03.2020
comment
Привет, brianbro Большое спасибо за ваше решение, и это то, что я искал. проголосовать. brianbro, если у вас есть ссылка на примечания к выпуску, можете ли вы предоставить то же самое. - person SSK; 23.03.2020
comment
Найдена ссылка на примечания к выпуску github.com/springdoc/springdoc-openapi/releases - person SSK; 11.06.2020