Я пытаюсь использовать 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.