为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2022-07-20 15:55:12
我有一个 Spring Boot 项目,它具有 Springfox 的下一个依赖项:<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>我有我的界面: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)(我已经单独测试过它们,它们也不起作用。)对隐藏文档没有影响。它仅在注释超过方法时才有效,但我想将它们全部隐藏,因为我还有其他要隐藏的端点。一些想法?
查看完整描述

5 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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

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

注释上的hidden属性@Api当前不起作用。(请参阅GitHub 问题。)


查看完整回答
反对 回复 2022-07-20
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

对于OpenAPI3SpringBoot
我在控制器的方法上使用了 @Hidden 注释。
它似乎在方法级别和控制器级别都有效。

@Hidden 注释是通过以下方式导入的:

import io.swagger.v3.oas.annotations;


查看完整回答
反对 回复 2022-07-20
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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


@RestController

public HomeController{

@ApiOperation(value = "<Your Message>", hidden = true)

    public String getMessage(@RequestParam(value = "msg") final String msg){

        return msg;

    }

}


查看完整回答
反对 回复 2022-07-20
?
青春有我

TA贡献1784条经验 获得超8个赞

我们只想从类中隐藏特定方法的场景。对于 swagger.v3 有一个名为Hiddenin的注释io.swagger.core.v3:swagger-annotations:2.0.10 jar。要隐藏的方法可以使用注释进行Hidden注释,如下所示。下面的方法显示了DELETE需要从 swagger 文档中隐藏的操作方法。


@DELETE

@Hidden

public void deleteList(int id) {

//code goes here.

}


查看完整回答
反对 回复 2022-07-20
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

另一种不同的好方法是在 SpringFox 配置上定义可见路径


@Configuration

@EnableSwagger2

public class SpringFoxConfig {


    @Bean

    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)

                .select()

                .apis(RequestHandlerSelectors.any())

                .paths(Predicates.or(PathSelectors.ant("/rtm/**"), PathSelectors.ant("/appview/**")))

                .build().apiInfo(apiEndPointsInfo());

    }

}

通过这种方式,您可以集中定义可见路径,并避免在许多控制器上放置大张旗鼓的注释。


查看完整回答
反对 回复 2022-07-20
  • 5 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信