我有一个带有Swagger下一个依赖项的Spring Boot项目:
<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)(我已经分别测试了它们,它们也不起作用。)对隐藏文档没有影响。仅当注释在方法上时,它才起作用,但是由于我还有其他端点要隐藏,因此我想全部隐藏它们。
@ApiIgnore
@Api(hidden = true)
有什么想法吗?
编辑:
这是我的Swagger配置:
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(); } }
您已@ApiIgnore在界面上添加了注释。看起来,当在接口上添加此注释时,该注释不起作用。(我真的不明白为什么要@Api在接口上工作,而@ApiIgnore不能。😕)
@Api
将注释直接添加到您的控制器类。这应该可以解决您的问题。
注释上的hidden属性@Api当前不起作用。(请参阅此 GitHub问题。)
hidden