首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用Springfox从Swagger文档中隐藏端点

如何用Springfox从Swagger文档中隐藏端点
EN

Stack Overflow用户
提问于 2019-03-05 11:42:26
回答 6查看 61.4K关注 0票数 18

我有一个Springfox项目,下一个依赖于Springfox:

代码语言:javascript
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

我有我的界面:

代码语言:javascript
运行
AI代码解释
复制
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.annotations.ApiIgnore;

@RestController
@RequestMapping(value = "/cache")
@ApiIgnore
@Api(hidden = true)
public interface CacheController {

    @RequestMapping(
        value = "clear/",
        method = RequestMethod.GET,
        produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_PLAIN_VALUE}
    )
    @ApiOperation(value = "", hidden = true)
    ResponseEntity<String> clearToken();
}

注释@ApiIgnore@Api(hidden = true) (我分别对它们进行了测试,它们也不起作用)。没有隐藏文档的效果。只有当注释在方法上时,它才能工作,但是我想将它们全部隐藏起来,因为我有其他想要隐藏的端点。

一些想法?

编辑:

这是我的Swagger配置:

代码语言:javascript
运行
AI代码解释
复制
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMethod;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    public static String API_KEY_NAME;

    @Bean
    public Docket apiDocumentation() {
        List<ResponseMessage> errorList = this.defineResponseMessages();

        return new Docket(DocumentationType.SWAGGER_2)  
          .select()       
          .apis(RequestHandlerSelectors.basePackage("my.package.rest"))              
          .paths(PathSelectors.any())                          
          .build()
          .useDefaultResponseMessages(true)
          .globalResponseMessage(RequestMethod.GET, errorList)
          .securitySchemes(Arrays.asList(this.apiKey()))
          .securityContexts(Arrays.asList(this.securityContext()))
          .apiInfo(this.apiInfo());                                          
    }

    @Value("${server.security.apiKeyName}")
    public void setApiKeyName(final String apiKeyName) {
        SwaggerConfig.API_KEY_NAME = apiKeyName;
    }

    private ApiKey apiKey() {
        return new ApiKey("apiKey", API_KEY_NAME, "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(PathSelectors.any()).build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("apiKey", authorizationScopes));
    }

    private List<ResponseMessage> defineResponseMessages() {
        List<ResponseMessage> errorList = new ArrayList<ResponseMessage>();

        ResponseMessage responseMessage = new ResponseMessageBuilder()
            .code(HttpStatus.INTERNAL_SERVER_ERROR.value())
            .message(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase())
            .build();

        errorList.add(responseMessage);

        responseMessage = new ResponseMessageBuilder()
                .code(HttpStatus.UNAUTHORIZED.value())
                .message(HttpStatus.UNAUTHORIZED.getReasonPhrase())
                .build();

        errorList.add(responseMessage);

        responseMessage = new ResponseMessageBuilder()
                .code(HttpStatus.NOT_FOUND.value())
                .message(HttpStatus.NOT_FOUND.getReasonPhrase())
                .build();

        errorList.add(responseMessage);

        return errorList;
    }

    private ApiInfo apiInfo() {
        ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
        return apiInfoBuilder
            .title("My API")
            .description("Description")
            .version("1.0.0 Beta")
            .build();
    }
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-03-06 12:44:02

您已经在接口上添加了@ApiIgnore注释。看起来,当添加到接口上时,这个注释不起作用。(我真的不明白为什么@Api在接口上工作,而@ApiIgnore不工作。)

将注释直接添加到控制器类。这应该能解决你的问题。

当前,hidden注释上的@Api属性无法工作。(请参阅 GitHub问题。)

票数 34
EN

Stack Overflow用户

发布于 2020-04-06 00:19:17

对于OpenAPI3和SpringBoot

我在控制器的方法上使用了@Hidden注释。

它似乎在方法级和控制器级都能工作。

@Hidden注释是从以下位置导入的:

代码语言:javascript
运行
AI代码解释
复制
import io.swagger.v3.oas.annotations;
票数 13
EN

Stack Overflow用户

发布于 2019-05-13 07:19:19

另一种方法是使用@ApiOperation(hidden = true),这可以在控制器/处理程序级方法中使用。例如。

代码语言:javascript
运行
AI代码解释
复制
@RestController
public HomeController{
@ApiOperation(value = "<Your Message>", hidden = true)
    public String getMessage(@RequestParam(value = "msg") final String msg){
        return msg;
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55010362

复制
相关文章
object.finalize_object的equals方法
finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
全栈程序员站长
2022/10/02
6850
object.finalize_object的equals方法
前端基础-HTML(object标签)
object标签 <object type="application/x-shockwave-flash" data="line.swf" width="500" height="500"></obj
cwl_java
2020/04/07
5410
前端基础-HTML(object标签)
java object toarray,Object[] toArray()
java.util.LinkedList.toArray()方法以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。此方法充当基于数组的API和基于集合的API之间的桥梁。
全栈程序员站长
2022/08/28
6610
Object类常用方法
方法签名:public String toString() ① 默认情况下,toString()返回的是“对象的运行时类型 对象的hashCode值(16进制)" ② 在进行String与其它类型数据的连接操作时,自动调用toString()方法
CODER-V
2023/03/04
3550
Object 有啥方法
这个 Object 指的是所有对象的父亲 package java.lang; 下的 object 类
韩旭051
2021/04/14
5870
Object 有啥方法
Java Map的containsKey(Object key)和containsValue(Object value)方法
public void testContainsKeyOrValue(){ Scanner sc = new Scanner(System.in); //Key System.out.println("请输入要查询的学生id:"); String id = sc.next(); System.out.println("你输入的学生id为:"+id+",在学生映射表中是否存在"+ students.con
JavaEdge
2018/05/16
2.1K0
js Object seal方法
接受一个对象作为参数,并返回相同的对象。作为参数传递的对象发生了变化,它现在是一个不接受新属性的对象。不能添加新属性,也不能删除现有属性,但可以更改现有属性。
IT工作者
2022/01/05
3.5K0
Object对象
Object对象是JavaScript中两个顶层对象之一,提供方法供直接调用以及原型链继承调用。
WindRunnerMax
2020/08/27
2.3K0
如何重写object虚方法
在 C# 中 Object 是所有类的基类,所有的结构和类都直接或间接的派生自它。前面这段话可以说所有的 C# 开发人员都知道,但是我相信其中有一部分程序员并不清楚甚至不知道我们常用的 ToString 、 Equals 和 GetHashCode 虚方法都来自于 Object 类,并且我们可以对它们进行重写。重写这三个虚方法可以说在项目开发中经常用到,只不过大部分开发人员并未留意这三个虚方法可以重写,而是自己写方法来实现。 下面我就来具体讲解一下它们三个应该怎么重写。在这里我需要说明的是本篇文章会大量涉及到设计规范和设计要求,代码只是作为辅助理解的形式出现,因此文章中的所有代码将会以代码段的形式出现。
喵叔
2020/09/08
8250
Object.keys和Object.values
使用Object.keys()或者Object.values()获取循环变量,渲染的时候根据循环变量获取值。Object.keys()函数返回索引(不仅仅是数字),Object.values()函数返回值。
从入门到进错门
2018/08/21
5500
"reason":"object mapping for [] tried to parse field [] as object, but found a concrete value"
enclosure_infor这个字段的mapping如下,是个nested类型的:
IT云清
2019/01/22
6.6K0
Java Object 类方法解析
我们都知道 Java 语言是面向对象的编程语言,而面向对象编程以类作为基本单元。我们也都知道,在 Java 中,所有的类都将 Object 类作为父类,而 Object 类本身提供了一些基础但是很有用的方法,这些方法我们在日常工作中经常会用到,因此熟悉它们的原理和用法对我们的开发会有很大的帮助,下面我们来一起看一些这些方法:
指点
2019/01/18
6660
Java Object 类方法解析
面试:Object 方法与原理
clone 方法的用法是对象的浅拷贝和深拷贝,clone是浅拷贝是对基本类型的值传递,对引用类型进行引用类型般的拷贝。深拷贝并拷贝对象的所有属性,并拷贝属性所指向的动态分配内存。实现深拷贝的方法有:1. 重写clone方法,对其内部的引用类型再进行clone. 2.通过序列化实现深拷贝,将拷贝的对象写入内存的字节流中,然后在读出转换为对象。新对象和原对象不存在地址的共享,所以实现深拷贝。3. 可以采用反射来实现深拷贝,迭代的依次拿到字段,并给新对象赋值。
Tim在路上
2020/08/04
3490
Object类
String toString() 返回该对象的字符串表示 返回该对象的字符串表示
默默的成长
2022/11/07
5720
Object类
Object划分
这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这
后端码匠
2021/02/18
7070
Object 有哪些常用方法
Object 是所有类的父类,任何类都默认继承 Object。Object 类到底实现了哪些方法?
Li_XiaoJin
2022/06/10
8030
Object类有哪些方法?
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
黑洞代码
2021/01/14
1.4K0
Object类有哪些方法?
LINQ to Object
LinQ to Object是指对随意IEnumerable或Ienumerable<T>集合使用linq查询.它可取代查询不论什么可枚举的集合.如List<T>,Array或Dictionary<K,V>.
全栈程序员站长
2022/07/13
1.3K0
LINQ to Object
TypeError: object()
对于上面这个错误,很容易迷惑我们,因为这个错误信息没有很明确的指出,到底是哪段代码除了问题。那这个错误是怎么产生的了,请听我细细道来。
py3study
2020/01/06
1.1K0
点击加载更多

相似问题

bootstrap:未捕获TypeError: Object [object Object]没有方法'tooltip','typeahead‘

40

TypeError: Object [ object ],[object Object]没有方法查找

30

jQuery/ #<Object>:Uncaught #<Object>:Object #<Object>没有“悬停”方法

12

Ajaxui标签:未捕获TypeError: Object [object Object]没有方法' tabs‘

23

Object [Object array]或[Object object]没有方法'then‘

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档