Обязательный заголовок для всех API в openapi 3.0

Я использую OpenAPI 3.0 с Spring-boot 5 и поэтому не имею конфигурации YAML. У меня есть заголовок, содержащий идентификатор идентификации клиента (это не заголовок аутентификации). Я хочу сделать это обязательным параметром заголовка. Добавлено ниже конфигурации OpenAPI

@Configuration
public class OpenAPIConfiguration {
    @Bean
    public OpenAPI customOpenAPI() {

        return new OpenAPI()
                .components(new Components()
                        .addParameters("myCustomHeader", new Parameter().in("header").schema(new StringSchema()).required(true).description("myCustomHeader").name("myCustomHeader")))
                .info(new Info()
                        .title("My Rest Application")
                        .version("1.2.26"));
    }
}

Однако пользовательский интерфейс swagger не отображает требуемый параметр ни в одном API. Может кто-нибудь помочь, что я делаю неправильно?

введите здесь описание изображения


person Akash    schedule 30.01.2020    source источник
comment
Заголовки аутентификации/авторизации должны быть определены как схемы безопасности.   -  person Helen    schedule 30.01.2020
comment
@Helen На самом деле это не параметр аутентификации, а скорее идентификатор идентификации клиента. Аутентификации нет, это Open Rest Service. Обновленный вопрос.   -  person Akash    schedule 30.01.2020


Ответы (1)


Добавление определения параметра к пользовательскому bean-компоненту OpenAPI не будет работать, поскольку этот параметр не будет распространяться на определения операций. Вы можете достичь своей цели, используя OperationCustomizer:

    @Bean
    public OperationCustomizer customize() {
        return (operation, handlerMethod) -> operation.addParametersItem(
                new Parameter()
                        .in("header")
                        .required(true)
                        .description("myCustomHeader")
                        .name("myCustomHeader"));
    }

Интерфейс OperationCustomizer был представлен в версии springdoc-openapi 1.2.22. В предыдущих версиях вам нужно было использовать OpenApiCustomiser:

@Component
public class MyOpenApiCustomizer implements OpenApiCustomiser {

    private static final List<Function<PathItem, Operation>> OPERATION_GETTERS = Arrays.asList(
            PathItem::getGet, PathItem::getPost, PathItem::getDelete, PathItem::getHead,
            PathItem::getOptions, PathItem::getPatch, PathItem::getPut);

    private Stream<Operation> getOperations(PathItem pathItem) {
        return OPERATION_GETTERS.stream()
                .map(getter -> getter.apply(pathItem))
                .filter(Objects::nonNull);
    }

    @Override
    public void customise(OpenAPI openApi) {
        openApi.getPaths().values().stream()
                .flatMap(this::getOperations)
                .forEach(this::customize);
    }

    private void customize(Operation operation) {
        operation.addParametersItem(
                new Parameter()
                        .in("header")
                        .required(true)
                        .description("myCustomHeader")
                        .name("myCustomHeader"));
    }
}
person Mafor    schedule 30.01.2020