spring-mvc swagger swagger-ui swagger-2.0

spring mvc - Cómo generar swagger.json



spring-mvc swagger-ui (5)

Estoy utilizando Java Framework Framework para crear la API REST para mi proyecto y estoy usando "springfox-swagger2 y springfox-swagger-ui" para generar documentación de Swagger. Puedo ver mi documentación utilizando la url http://localhost:8080/swagger-ui.html .

¿Cómo puedo crear o generar swagger.json / spec.json? La documentación no debe estar en esta aplicación. Estamos utilizando una aplicación separada para listar los documentos API.



Llegué un poco tarde aquí, pero me di cuenta de que puedes abrir la consola del navegador y encontrar la URL para la solicitud GET que devuelve la definición JSON para tus documentos de Swagger. La siguiente técnica me funcionó cuando asigné mi API a AWS API Gateway.

Para hacer esto:

  1. Navegue hasta el punto final de Swagger docs.
  2. Abre la consola del navegador
  3. Recarga la página
  4. Navegue a la pestaña de red y filtre por solicitudes XHR
  5. Haga clic con el botón derecho en la solicitud XHR que termina en ?format=openapi
  6. ¡Ahora puedes simplemente copiarlo y pegarlo en un nuevo archivo JSON!

Lo he hecho con un pequeño truco.

He añadido el siguiente código al final de mi caso de prueba del controlador doméstico

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(); } } } }

No sé si esto es correcto o no, pero está funcionando :)

Dependencia

<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>


Puede obtener la url con su página html swagger-ui:

GET http://localhost:8080/v2/api-docs?group=App

Y, de hecho, puede obtener todas las URL con la función de red de herramientas de desarrollo de Chrome / Firefox


Si usa Maven, puede generar documentación del lado del cliente y del servidor (yaml, json y html) usando swagger-maven-plugin

Agrega esto a tu pom.xml:

..... <plugin> <groupId>com.github.kongchen</groupId> <artifactId>swagger-maven-plugin</artifactId> <version>3.0.1</version> <configuration> <apiSources> <apiSource> <springmvc>true</springmvc> <locations>com.yourcontrollers.package.v1</locations> <schemes>http,https</schemes> <host>localhost:8080</host> <basePath>/api-doc</basePath> <info> <title>Your API name</title> <version>v1</version> <description> description of your API</description> <termsOfService> http://www.yourterms.com </termsOfService> <contact> <email>[email protected]</email> <name>Your Name</name> <url>http://www.contact-url.com</url> </contact> <license> <url>http://www.licence-url.com</url> <name>Commercial</name> </license> </info> <!-- Support classpath or file absolute path here. 1) classpath e.g: "classpath:/markdown.hbs", "classpath:/templates/hello.html" 2) file e.g: "${basedir}/src/main/resources/markdown.hbs", "${basedir}/src/main/resources/template/hello.html" --> <templatePath>${basedir}/templates/strapdown.html.hbs</templatePath> <outputPath>${basedir}/generated/document.html</outputPath> <swaggerDirectory>generated/swagger-ui</swaggerDirectory> <securityDefinitions> <securityDefinition> <name>basicAuth</name> <type>basic</type> </securityDefinition> </securityDefinitions> </apiSource> </apiSources> </configuration> </plugin> ........

Puede descargar la plantilla * .hbs en esta dirección: https://github.com/kongchen/swagger-maven-example

Ejecute mvn swagger: genere la documentación JSon que se generará en su directorio project / generator / swagger /. Pásalo en esta dirección: http://editor.swagger.io

Y genere lo que quiera (API del lado del servidor o del lado del cliente en su tecnología preferida)