Suddenly Springfox Swagger 3.0 is not working with spring webflux

46,893

Solution 1

The implementation has changed recently (see migrating from earlier snapshots for a brief update on this).

Now the UI is avaiable under /swagger-ui endpoint (not /swagger-ui.html).

You should also drop the @EnableSwagger2WebFlux annotation and addResourceHandlers() method, remove all springfox dependencies and add just one:

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>${springfox.version}</version>
</dependency>

Solution 2

Getting Started with Swagger-3 in Springboot Rest API

For new projects

For Maven:-

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

For Gradle:-

  implementation "io.springfox:springfox-boot-starter:<version>"

Now there is no extra configuration to activate swagger on the spring-boot project like the previous. if try to configure with security, there is some configuration. plz refer to this article.

In swagger version 3 remove the @EnableSwagger2 annotation base config also.

And most of the user tries to find HTML swagger document file using {host}/swagger-ui.html or {host}/swagger-ui those are now removed.

use {host}/swagger-ui/ to see the HTML document

This is a sample project link on GitHub Refer to documentation io.springfox

Solution 3

This is how it worked for me. I am using InteliJ IDEA, SpringBoot and Maven.

When adding Swagger dependencies as:

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

They were colored in red and I could not add them at all. I tried reloading my project, generate sources and update folders, but I just couldn't install it.

Then I added this dependency as well:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>

And it worked just fine. Also, I find my conclusion to the problem here:

Baeldung

So in the end I had this in my pom.xml file:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>

To see Swagger UI in your browser using Swagger 3.0 is

http://localhost:8080/swagger-ui/index.html

Hope it helps to someone :)

Solution 4

Use only this dependecy without io.springfox dependencies

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>

Now there is no extra configuration to activate swagger on the spring-boot project like the previous.

In swagger version 3.0.0 remove the @Configuration and @EnableSwagger2 and annotations.

use {host}/swagger-ui/ to see the HTML document, {host}/swagger-ui.html or {host}/swagger-ui those are now removed. Schneider

Solution 5

Ok, after reading everything and after trying most, got my swagger-ui on /swagger-ui/index.html#

https://github.com/springfox/springfox-demos/tree/master/boot-swagger

Share:
46,893

Related videos on Youtube

Praveen Dhasarathan
Author by

Praveen Dhasarathan

I am working as a Senior Software Engineer in Lowes India private limited, Bangalore.

Updated on January 19, 2022

Comments

  • Praveen Dhasarathan
    Praveen Dhasarathan over 2 years

    Application was working with Springfox Swagger 3.0 few days back. Suddenly it is stopped working. The Jar file which was created before a week is still working but now when we try to build a new Jar file, which is not working, even without any code/library changes. I have even referred the below URL but still facing issue.

    404 error with swagger-ui and spring webflux

    Below given my configuration:

    POM file:

    <properties>
        <java.version>1.8</java.version>
        <springfox.version>3.0.0-SNAPSHOT</springfox.version>
        <spring.version>2.3.1.RELEASE</spring.version>
    </properties>
    <repositories>
        <repository>
            <id>spring-libs-milestone</id>
            <name>Spring Milestone Maven Repository</name>
            <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
        </repository>
    </repositories>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-webflux</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>
    </dependencies>
    

    Config Files:

    @Configuration
    @EnableSwagger2WebFlux
    public class SwaggerConfiguration implements WebFluxConfigurer {
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(new ApiInfoBuilder()
                            .description("My Reactive API")
                            .title("My Domain object API")
                            .version("1.0.0")
                            .build())
                    .enable(true)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.reactive.controller"))
                    .paths(PathSelectors.any())
                    .build();
    
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
            registry.addResourceHandler("/swagger-ui.html**")
                    .addResourceLocations("classpath:/META-INF/resources/");
    
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    

    I am getting 404 error when I try to open the swagger page.

    http://localhost:8080/swagger-ui.html

    Can someone help me with this. Thanks in advance.

    • Toerktumlare
      Toerktumlare almost 4 years
      Code doesn’t magically change, some change must have been done, provide debug logs.
    • Martin Tarjányi
      Martin Tarjányi almost 4 years
      You use Snapshot version from Springfox. Snapshot dependencies are free to change anytime. Springfox team are working on creating a final version. Check out issues on Github for more details: github.com/springfox/springfox/issues
  • Praveen Dhasarathan
    Praveen Dhasarathan almost 4 years
    Is it possible to customize the swagger ui path.? Instead of localhost:8080/swagger-ui/ I want to use localhost:8080/mycontextpath/swagger-ui/. As I am using netty server, Didn't get the default context path option.
  • Svetopolk
    Svetopolk over 3 years
    try this in application.property file: springfox.documentation.swagger-ui.base-url=/mycontextpath
  • noNihongo
    noNihongo over 3 years
    @PraveenD Try to go to your applicaiton.properties. And there add server.servlet.context-path=mycontextpath. The spring take care of the contextpath.
  • Gordon Bean
    Gordon Bean over 3 years
    You may need to run mvn clean before the changes will take effect.
  • Eric
    Eric about 3 years
    BTW, the / at end of /swagger-ui/ is necessary.
  • user9347049
    user9347049 about 3 years
    @vuhoanghiep1993 I am glad :)
  • Ruchi
    Ruchi about 3 years
    @jrd..Hello...What things to change if using non boot spring mvc?.. I am having the same issue with non bootable spring4 mvc project.
  • gidds
    gidds about 2 years
    BTW, it may be better to use /swagger-ui/index.html instead of /swagger-ui/, to avoid some character encoding issues.
  • André Rodrigues de Sousa
    André Rodrigues de Sousa about 2 years
    I'm getting the following error, when trying to access localhost:8080/swagger-ui/: org.springframework.security.web.firewall.RequestRejectedExc‌​eption: The request was rejected because the URL contained a potentially malicious String "//"