Как я могу условно игнорировать PathVariable на пользовательском интерфейсе swagger, используя springdo c openapi - PullRequest
2 голосов
/ 06 марта 2020

Я мигрирую из springfox 2.9.0 в springdo c -openapi-ui 1.2.33. У меня есть требование, чтобы показать или скрыть PathVariable на Swagger UI в зависимости от условия. У меня есть два пути, как показано ниже

  1. String nameIdentifier = "{fisrtName} / {lastName}"

  2. String 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;
    }

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

Спасибо

1 Ответ

3 голосов
/ 15 марта 2020

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

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

static {
    SpringDocUtils.getConfig().addAnnotationsToIgnore(IgnoreLastName.class);
}
...