Search code examples
spring-mvcswaggerswagger-uiswagger-2.0

How to generate swagger.json


I am using java spring boot framework to create REST api for my project and I am using "springfox-swagger2 and springfox-swagger-ui" for generating swagger documentation. I am able to see my documentation using the URL http://localhost:8080/swagger-ui.html.

How can I create or generate swagger.json / spec.json, The documentation should not be with this application, we are using a separate application for listing the API docs.


Solution

  • I have done this with a small trick

    I have added the following code in the end of my home controller test case

    import org.springframework.boot.test.web.client.TestRestTemplate;
    
    public class HomeControllerTest extends .... ...... {
    
    @Autowired
    private TestRestTemplate restTemplate;
    
    
    @Test
    public void testHome() throws Exception {
         //.......
         //... my home controller test code 
         //.....
    
        String swagger = this.restTemplate.getForObject("/v2/api-docs", String.class);
    
        this.writeFile("spec.json", swagger );
    }
    
    public void writeFile(String fileName, String content) {
    
        File theDir = new File("swagger");
    
        if (!theDir.exists()) {
            try{
                theDir.mkdir();
            } 
            catch(SecurityException se){ }        
        }
    
        BufferedWriter bw = null;
        FileWriter fw = null;
        try {
            fw = new FileWriter("swagger/"+fileName);
            bw = new BufferedWriter(fw);
            bw.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null)
                    bw.close();
                if (fw != null)
                    fw.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
        }
    
    }
    }
    

    I don't know this is right way or not But it is working :)

    Dependency

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