web-dev-qa-db-ja.com

springfox-swagger2 UIで「ベースURLを推測できません」と表示されるのはなぜですか。

Springfox-swagger2 UIが表示する理由Unable to infer base url.私の知る限り、典型的なSwaggerスプリングブート構成を使用しています。

スクリーンショットでわかるように、UIを支えるswagger-foxのURLはexample.com/apiです。注:標準のSpring Whitelabel Error Pageに移動すると: https:// localhost:9600/api/v2/api-docs / これが問題の原因だと思う? Springがロードしなかったエラーは表示されませんspringfox-swagger2それで、なぜそれが機能しないのか分かりません。

enter image description here

私の設定は次のようになります(そして、ネットでアドバイスを検索することから、この設定のあらゆる種類のバリエーションを試しました):

@EnableSwagger2
@EnableWebMvc
@ComponentScan(basePackages = {"com.company.project"})
public class SwaggerConfig
{
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.cloud")))
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.data.rest.webmvc")))
                .paths(PathSelectors.any())
                .build();
    }
}

そして

<!-- to generate /swagger-ui.html -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.7.0</version>
</dependency>

注:興味深いことに、バージョン2.6.0を試してみると、モーダルポップアップは表示されませんが、Swagger UIには0のAPIコンテンツが表示されます。だから、モーダルはかなり新しいものでなければならないことを知っていますか?

ここに十分な情報がない場合は、コメントを残してください。

19
djangofan

私の問題の解決策は、@EnableSwagger2アノテーションをDocket BeanとともにメインのConfigurationクラスに移動することでした。

Docket Beanを使用してサブパッケージに別のクラスを作成し、SpringでスキャンしてBeanをロードすることを期待していました。おそらく、そのドケットクラスに@Componentの注釈を付けられなかったか、問題が他の何かであった可能性がありますが、うまくいきました。

4
djangofan

Markが示唆するように、注釈付きのSpringBootApplicationを追加することで問題を解決できました。

@EnableSwagger2
21
Shiva Achari

私にとって問題は、Spring Securityがswagger-uiに必要なリソースへのアクセスを許可していないことでした。解決策は、次のパスへの匿名アクセスを許可することでした。

  • /swagger-ui.html
  • / webjars/**
  • / v2/**
  • / swagger-resources/**

私の場合、これらのリソースに認証なしでアクセスできることは問題ありません。

12
Northmoor

SpringBootServletInitializerでメインクラスを拡張するだけです。それはうまくいきます。以下のように参照してください。

public class TestApp extends SpringBootServletInitializer{

    public static void main(String[] args) {

       SpringApplication.run(TestApp.class, args);
   }
}

Spring 2の場合、@ SpringBootApplicationアノテーションを使用し、SpringBootServletInitializerからクラスアプリケーションを拡張し、SpringApplicationBuilderメソッドをオーバーライドします。

@SpringBootApplication
public class TestApp extends SpringBootServletInitializer{

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(TestApp.class);
    }


    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
}
1
Kendy Alvarado

スプリングブーツを使用しています。

私の場合、パッケージ名を間違えました。私のプロジェクトでは、基本パッケージ名は

org.liferayasif.documents

だから私の設定ファイルは中にあるべきです

org.liferayasif.documents.config

config-> uは任意の名前を付けることができます。

しかし、間違って以下のように別のパッケージ名を付けました

org.liferayasif.config

私の場合、適切なパッケージ名の中に構成ファイルを入れたら

org.liferayasif.documents.config

その後、正常に機能しました。

0
asifaftab87

私の場合、springboot(2.1.2)swagger2(2.9.2)Tomcat8.5のwarファイルとしてのアプリケーションで、同じエラーが発生します。

後で、このクラスファイルを拡張するだけで修正できましたAppConfig extends SpringBootServletInitializer

完全なAppConfigファイル

package org.mydomain

import Java.net.URL;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication(scanBasePackages = "org.mydomain")
@EntityScan({"org.mydomain.entity"})
@EnableJpaRepositories({"org.mydomain.repository"})
@EnableSwagger2
@EnableScheduling
public class AppConfig extends SpringBootServletInitializer {

  // We can optionally have spring boot way of starting main method
  public static void main(String[] args) {
     SpringApplication.run(AppConfig.class, args);
  }
}

これは、SpringbootアプリケーションをTomcatに展開する方法を紹介したブログです

注:デフォルトの実装を使用するだけのswagger docketを構成していません。

0
prem

Spring Securityメソッドでリソースへの匿名アクセスを追加する必要がありました:protected void configure(HttpSecurity http)

.antMatchers("/api/**", "/swagger-ui.html", "/webjars/**", "/v2/**", "/swagger-resources/**").anonymous()

そして、それは働き始めます。

0
Damian JK