在 swagger 3.0 上隐藏端点 UI
Hide endpoint on swagger 3.0 UI
我想要一个私有端点,它应该隐藏在 Swagger 上 API UI.
参考我创建过滤器 class 的其他一些帖子,如下所示。
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 时没有调用 isOperationAllowed UI。什么时候调用 isOperationAllowed 方法?
- 尝试将
@ApiIgnore
添加到控制器中的方法 class
- 另一种方法是添加
@ApiOperation(hidden = true)
正如您已经指定的那样,您不能在控制器顶部使用任何注释,因为您要隐藏的端点是自动生成的。在这种情况下,一种可能的解决方案是通过 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();
}
}
我想要一个私有端点,它应该隐藏在 Swagger 上 API UI.
参考我创建过滤器 class 的其他一些帖子,如下所示。
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 时没有调用 isOperationAllowed UI。什么时候调用 isOperationAllowed 方法?
- 尝试将
@ApiIgnore
添加到控制器中的方法 class - 另一种方法是添加
@ApiOperation(hidden = true)
正如您已经指定的那样,您不能在控制器顶部使用任何注释,因为您要隐藏的端点是自动生成的。在这种情况下,一种可能的解决方案是通过 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();
}
}