Ich habe folgendes Thema gelesen: Deaktivieren von Swagger mit Spring MVC
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.
Meine 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 Start meiner Anwendung den folgenden VM - Flag -Dspring.profiles.active=swagger
. Hier ist ein Beispiel meiner Swagger-Konfiguration.
@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
...
}
Wenn Sie das nächste Mal versuchen, auf swagger-ui.html
ohne swagger
zuzugreifen, wird ein leerer Swagger-Bildschirm angezeigt, nicht jedoch 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());
}
}
Wenn Sie jetzt versuchen, auf swagger-ui.html
ohne swagger
zuzugreifen, erhalten Sie eine 404.
Sie können den @EnableSwagger2
zu seinem eigenen @Configruation
auslagern und bedingt über eine Eigenschaft oder ein Profil laden. z.B.
@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
//Additional Swagger Beans
}
dies würde Swagger für jedes Profil aktivieren, das nicht produktiv ist.
Für diejenigen, die den Code gen verwenden:
@Controller @ Profile ({"dev", "staging"}) Public class HomeController { @RequestMapping (value = "/") Public String index () { System.out.println ("swagger-ui.html"); return "redirect: swagger-ui.html"; } }
Und fügen Sie die Datei zu .swagger-codegen-ignore hinzu, sonst werden Ihre Änderungen beim nächsten Maven-Build überschrieben
Wenn Sie keine Swagger-Annotationen in Controllern haben, schließen Sie einfach SwaggerConfig.class und Swagger-Abhängigkeiten vom Build aus
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>com/company/app/SwaggerConfig.Java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</exclude>
<exclude>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>