【问题标题】:Hide a method in springdoc-openapi based on a condition根据条件隐藏springdoc-openapi中的方法
【发布时间】:2021-12-07 11:52:25
【问题描述】:

我们正在开发一个使用 springdoc-openapi 库生成 swagger 文档的 spring boot 项目。我们有一个要求,我们需要在控制器中隐藏一些 API。 Spring boot 确实提供了一种使用 @ConditionalOnProperty 标记隐藏/显示控制器的方法。但是spring boot没有办法隐藏/显示基于属性的方法。

springdoc-openapi 是否提供了在扫描所有控制器后过滤操作的方法?或任何其他基于属性隐藏/显示某些 API 的方法。

【问题讨论】:

    标签: spring-boot spring-boot-actuator springdoc-openapi-ui springdoc-ui


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-17
      • 2021-07-13
      • 2020-10-02
      • 2021-09-19
      • 2016-10-29
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      相关资源
      最近更新 更多