Swagger UIをSpring Boot 1.2.1で動作させようとしています。 https://github.com/martypitt/swagger-springmvc の指示に従い、春の設定に@EnableSwagger
を追加しました。
現在、http://localhost:8080/api-docs
にアクセスするとJSONが返されますが、Nice HTMLは返されません。
私はMavenを使用しており、swagger-uiへの依存関係を追加しました。
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
これは私の依存関係の完全なリストです:
<dependencies>
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.9.4</version>
</dependency>
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
URLとしてhttp://localhost:8080/docs/index.html
も試しましたが、「ホワイトラベルエラーページ」が表示されるだけです
更新:
問題を示すためにGithubでテストプロジェクトを作成しました: https://github.com/wimdeblauwe/springboot-swagger-test
問題はSwaggerConfiguration
ファイルにあります。 @EnableWebMvc
を取り出す必要があります。これにより、デフォルトのSpring Bootビューリゾルバーが、静的コンテンツを異なる方法で提供するデフォルトの 'SpringWebMvc'によって上書きされるためです。
デフォルトでは、Spring Bootは次のディレクトリのいずれかから静的コンテンツを提供します。
webjarを含む。
私は同じ問題を抱えていましたが、ドキュメントでこれを見つけました: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html #boot-features-spring-mvc-auto-configuration
Spring MVCを完全に制御したい場合は、
@Configuration
アノテーションが付いた独自の@EnableWebMvc
を追加できます。 Spring Boot MVC機能を保持し、MVC設定(インターセプター、フォーマッター、View Controllerなど)を追加するだけの場合は、WebMvcConfigurerAdapter
タイプの独自の@Bean
を追加できますが、 なし@EnableWebMvc
。
これがお役に立てば幸いです。
Swagger-ui v0.4(spring v4.14およびswagger-springmvc v0.9.4)は正常に動作していますが、最初は同様の問題がいくつかありました。このクラスがうまくいくようです。
@Configuration
@EnableSwagger
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Autowired
private SpringSwaggerConfig springSwaggerConfig;
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(springSwaggerConfig).apiInfo(
apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfo(/* strings */);
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
関連するのはオーバーライドされたconfigureDefaultServletHandling
だと思います。メインWebApplicationInitializer
には、次のものがあります。
@Import(SwaggerConfig.class)
最後に、UIのロケーションボックスに「 http:// localhost:808 $ {pageContext.request.contextPath}/api-docs」と表示される問題を修正しました。これを依存関係に含めます。
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<!--<version>8.0.15</version>-->
<scope>provided</scope>
</dependency>
これにより、JSP処理に関連する何かが提供されます。 spring-boot
の依存関係に含まれていますが、通常はprovided
ではありません。
お役に立てば幸いです。
私は同じ問題を抱えていますが、このリンクは私のために機能します: http:// localhost:8080/sdoc.jsp
Swagger UIリソースURLボックスに事前入力されます: http:// localhost:808 $ {pageContext.request.contextPath}/api-docs
手作業で編集して$ {pageContext.request.contextPath}を削除し、[探索]をクリックすると、APIドキュメントが表示され、エンドポイントを正常に試すこともできます。したがって、間違いなく問題ですが、おそらく$ {pageContext.request/contextPath}を取得していません。
Javascriptのソースを見ると:url:window.location.Origin + "$ {pageContext.request.contextPath}/api-docs"
静的なswagger ui htmlでは、この作品は次のようにコーディングされています:
discoveryUrl: "./ resource-list.json"
これが少し役立つことを願っています