javaspring-bootswaggerspringdocspring-restdocs

How to load openapi local files into swagger on localhost? (Files generated by restdocs)


I have my api documentation generated by restdocs through unit tests. Although it works fine for most of my needs, I'm still lacking a bit of the nice swagger features, so I was trying to have the best of both words by converting the restdocs into swagger. After trying for a long time, I finally managed to get it done with the help of some third part libraries (https://github.com/ePages-de/restdocs-api-spec https://github.com/BerkleyTechnologyServices/restdocs-spec). This generates the open api files under the static docs folder. However, when I try to access the swagger url http://localhost:8081/swagger-ui/index.html, It wouldn't show it there, which would have worked by default if adding swagger directly with the swagger annotation on the controller. I can manually import the openapi yml file and see it through the https://editor.swagger.io/ but there may be a better way to map swagger to automatically find the openapi files directly from my code so I can keep using the default swagger url for this?

Thank you.

 <plugin>
        <groupId>io.github.berkleytechnologyservices</groupId>
            <artifactId>restdocs-spec-maven-plugin</artifactId>
            <version>${restdocs-spec.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <!--suppress MavenModelInspection -->
                        <skip>${skipTests}</skip>
                        <host>localhost:8081</host>
                        <specification>OPENAPI_V3</specification>
                        <outputDirectory>${project.build.directory}/classes/static/docs</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

enter image description here

enter image description here

UPDATE

Trying with the docs under the resources folder, but still getting the same error. I've opened a new question with details here Failed to load api definition when loading files from application properties

![enter image description here


Solution

  • You have need to put the openapi specification yml in the resource folder and set springdoc.swagger-ui.url=/openapi-3.yaml in the application.properties file of spring boot app.

    Checkout springdoc api documentation

    In application properties need to make sure

    spring.web.resources.add-mappings=false
    

    shouldn't be added its preventing to serve static content.

    Also openapi-3.0.yml should be placed inside of resources/static folder.