Скрыть метод в springdoc-openapi на основе условия
Мы работаем над проектом весенней загрузки, который использует библиотеку springdoc-openapi для создания документа swagger. У нас есть требование, по которому нам нужно скрыть несколько API в контроллере. Spring boot действительно предоставляет способ скрыть / показать контроллер с помощью тега @ConditionalOnProperty. но весенняя загрузка не позволяет скрыть / показать метод на основе свойства.
Предоставляет ли springdoc-openapi способ фильтрации операции после сканирования всех контроллеров? или любой другой способ скрыть / показать некоторые API-интерфейсы на основе свойства.
1 ответ
Вы можете переопределить поведение Springdoc OperationService#isHidden следующим образом:
package alex.swaggerhidden.service;
import org.springdoc.core.GenericParameterService;
import org.springdoc.core.OperationService;
import org.springdoc.core.PropertyResolverUtils;
import org.springdoc.core.RequestBodyService;
import org.springdoc.core.SecurityService;
import org.springdoc.core.providers.JavadocProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Optional;
@Component
@Primary
public class MyOperationService extends OperationService {
private final boolean exposeHidden;
public MyOperationService(GenericParameterService parameterBuilder, RequestBodyService requestBodyService, SecurityService securityParser, PropertyResolverUtils propertyResolverUtils, Optional<JavadocProvider> javadocProvider, @Value("${app.expose-hidden}") boolean exposeHidden) {
super(parameterBuilder, requestBodyService, securityParser, propertyResolverUtils, javadocProvider);
this.exposeHidden = exposeHidden;
}
@Override
public boolean isHidden(Method method) {
if (exposeHidden) {
return false;
}
return super.isHidden(method);
}
}
Теперь скрытое поведение будет игнорироваться, если
app.expose-hidden
установлен в
TRUE
app:
expose-hidden: true