Ich habe folgendes Thema gelesen: Swagger mit Spring MVC deaktivieren
und ich schrieb:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.project.name.controller"))
.paths(PathSelectors.ant("/api/**"))
.build()
.apiInfo(apiInfo())
.enable(false);
}
Aber falls ich versuche, auf Swagger ui zuzugreifen: localhost:8080/swagger-ui.html
Aha
Es sieht nicht genau aus. Kann ich diese URL vollständig deaktivieren? 404 zum Beispiel oder so ähnlich.
Antworten:
14 für die Antwort № 1Meine Antwort ist ähnlich wie die zuvor gegebene mit einem kleinen Unterschied. Normalerweise erstelle ich ein separates Federprofil mit dem Namen swagger
. Wenn ich Swagger aktivieren möchte, übergebe ich beim Starten meiner Anwendung das folgende VM-Flag. -Dspring.profiles.active=swagger
. Hier ist ein Beispiel meiner Swagger-Konfiguration.
@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
...
}
Nächstes Mal, wenn Sie versuchen, darauf zuzugreifen swagger-ui.html
ohne swagger
Profil erhalten Sie einen leeren Swagger-Bildschirm, aber nicht 404.
Wenn Sie die statische Swagger-UI-Seite überhaupt nicht laden möchten, können Sie einen einfachen Controller wie folgt schreiben:
@Profile("!swagger")
@RestController
@Slf4j
public class DisableSwaggerUiController {
@RequestMapping(value = "swagger-ui.html", method = RequestMethod.GET)
public void getSwagger(HttpServletResponse httpResponse) throws IOException {
httpResponse.setStatus(HttpStatus.NOT_FOUND.value());
}
}
Nun, wenn Sie versuchen, darauf zuzugreifen swagger-ui.html
ohne swagger
Profil erhalten Sie eine 404.
1 für die Antwort № 2
Sie können das auslagern @EnableSwagger2
zu seinen eigenen @Configruation
und laden Sie es bedingt über eine Eigenschaft oder ein Profil. z.B.
@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
//Additional Swagger Beans
}
Dies würde Swagger für jedes Profil aktivieren, das nicht produziert wird.