次のトピックを読みました: Spring MVCでSwaggerを無効にする
そして私は書いた:
@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);
}
しかし、私がswagger uiにアクセスしようとした場合:localhost:8080/swagger-ui.html
そうですか -
正確に見えません。このURLを完全に無効にできますか?たとえば404またはこのようなもの。
私の答えは、以前に提供した答えと似ていますが、わずかな違いがあります。通常、swagger
という名前の別個のスプリングプロファイルを作成します。 Swaggerを有効にしたい場合は、アプリケーションの起動中に次のVMフラグ-Dspring.profiles.active=swagger
。]を渡します。これが私のSwagger構成の例です。
@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
...
}
次回swagger
プロファイルなしでswagger-ui.html
にアクセスしようとすると、404ではなく空のSwagger画面が表示されます。
静的なSwagger UIページをまったくロードしたくない場合は、以下に示すように簡単なコントローラーを作成できます。
@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());
}
}
swagger
プロファイルなしでswagger-ui.html
にアクセスしようとすると、404が返されます。
@EnableSwagger2
を独自の@Configruation
に外部化し、プロパティまたはプロファイルを介して条件付きでロードできます。例えば.
@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
//Additional Swagger Beans
}
これにより、実稼働ではないプロファイルのswaggerがアクティブになります。
コントローラ内にSwaggerアノテーションがない場合...ビルド時にSwaggerConfig.classとswagger依存関係を除外するだけです
<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>
コード生成を使用する場合:
@Controller @ Profile({"dev"、 "staging"}) public class HomeController { @RequestMapping(value = "/") public String index(){ System.out.println( "swagger-ui.html"); return "redirect:swagger-ui.html"; } }
そして、ファイルを.swagger-codegen-ignoreに追加します。それ以外の場合、変更は次のMavenビルドで上書きされます