web-dev-qa-db-ja.com

Swagger UIをSpringブートで動作させることができません

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

21
Wim Deblauwe

問題はSwaggerConfigurationファイルにあります。 @EnableWebMvcを取り出す必要があります。これにより、デフォルトのSpring Bootビューリゾルバーが、静的コンテンツを異なる方法で提供するデフォルトの 'SpringWebMvc'によって上書きされるためです。

デフォルトでは、Spring Bootは次のディレクトリのいずれかから静的コンテンツを提供します。

  • / META-INF/resources /
  • / resources /
  • /静的/
  • /公衆/

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

これがお役に立てば幸いです。

31
Tamas

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ではありません。

お役に立てば幸いです。

2
Lucas Ross

私は同じ問題を抱えていますが、このリンクは私のために機能します: 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"

これが少し役立つことを願っています

1
Borna