Скрыть метод в 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
Другие вопросы по тегам