2

我想要一个私有端点,它应该隐藏在 Swagger API UI 上。

参考我创建的过滤器类的其他一些帖子,如下所示。

public class Myfilter implements SwaggerSpecFilter
public class MySwaggerSpecFilter implements SwaggerSpecFilter {
  @Override
     public boolean isOperationAllowed(Operation operation, ApiDescription api, Map<String, List<String>> params,
             Map<String, String> cookies, Map<String, List<String>> headers){}
 
 @Override
     public boolean isParamAllowed..
 
 @Override
     public boolean isPropertyAllowed...
 }

public MyApplication extends Application {
@Override
 public Set<Class<?>> getClasses()
 {
     final Set<Class<?>> classes = new HashSet<>();

     // Set Swagger Filter
     FilterFactory.setFilter(new MySwaggerSpecFilter());
}
}

Web.xml

<servlet>
     <servlet-name>myservlet</servlet-name>
     <servlet-class>ServletClass</servlet-class>
     <init-param>
         <param-name>javax.ws.rs.Application</param-name>
         <param-value>PATHTO/MyApplication</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
 </servlet>

我看到加载 Swagger UI 时没有调用 isOperationAllowed。什么时候调用 isOperationAllowed 方法?

4

2 回答 2

0
  • 尝试@ApiIgnore在控制器类中添加您的方法
  • 另一种方法是添加@ApiOperation(hidden = true)
于 2020-07-06T08:34:30.963 回答
0

正如您已经指定的那样,您不能在控制器顶部使用任何注释,因为您要隐藏的端点是自动生成的。在这种情况下,一种可能的解决方案可能是通过any()选择器使用ant()选择器来选择路径,如下所示-

而不是使用这种.paths(PathSelectors.any())用法.paths(PathSelectors.ant("/path-to-match/**"))

具体到spring-boot而不是使用下面的代码 -

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())     <<<<<
            .build();
    }
}

使用下面的代码 -

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.ant("/path-to-match/**")) <<<<<
            .build();
    }
}
于 2020-07-09T11:35:59.737 回答