Добавление OpenAPISpecFilter с использованием аннотаций или ResourceConfig - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь использовать OpenAPISpecFilter из Swagger-Core 2.0.5, который создает спецификацию OpenAPI 3.0.

примеров предоставляют такой класс в качестве примера, но при запускеВ примере приложения фильтр не активен.Я наблюдаю такое же поведение в моем приложении.

Документация не очень ясна по этому вопросу:

Фильтры

Вы можете предоставить реализацию OpenAPISpecFilter в конфигурации длябыть в состоянии отфильтровать или даже полностью изменить разрешенное определение.

При реализации фильтра расширение AbstractSpecFilter, вероятно, является наиболее удобным вариантом, поскольку позволяет переопределить только необходимый метод фильтра.

Простым примером фильтра может быть:

/**  
* Sample filter to avoid all resources for the /user resource 
**/ public class NoPetOperationsFilter extends AbstractSpecFilter {

    public static final String PET_RESOURCE = "/pet";

    @Override
    public Optional<Operation> filterOperation(Operation operation, ApiDescription api, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
        if (api.getPath().startsWith(PET_RESOURCE)) {
            return Optional.empty();
        }
        return Optional.of(operation);
    } } check out the tests for some additional examples of filter usage.

При использовании предоставленных ресурсов JAX-RS для предоставления API этот фильтр будет применяться автоматически [...]

source

Класс, присутствующий в моем пути к классам, и я полагаю, что я полагаюсь на предоставленные ресурсы JAX-RS для предоставления API .

Я не вижу никаких аннотаций Swagger / OpenAPI или элемента в ResourceConfig, которые позволили бы мне объявить фильтр вручную.

Документация continues:

[...] в противном случае, например, при обслуживании определения из собственного сервлета или ресурса, вы можете применить его, например, как:

OpenAPI oas = resolveDefinition()
OpenAPISpecFilter
SpecFilter f = new SpecFilter();
oas = f.filter(oas, filterImpl, getQueryParams(uriInfo.getQueryParameters()), getCookies(headers),
        getHeaders(headers));

Thisстранно, поскольку у объекта OpenAPISpecFilter нет метода filter.

Возможно, я просто что-то здесь упускаю, но ситуация неясна (как документация).Я не смог найти ни одного рабочего примера в проектах с открытым исходным кодом, я просто хотел бы узнать, как должны быть зарегистрированы эти конкретные фильтры Swagger / OpenAPI.

...