Article image
Leonardo Garcia
Leonardo Garcia27/02/2023 16:34
Compartilhe

SpringFox Descontinuado. Saiba Como Migrar Para o SpringDoc

  • #Spring Boot / Spring Framework
  • #Java

SpringFox

O SpringFox foi utilizado por bastante tempo para documentar API's Spring utilizando o Swagger, no entanto, sua última versão foi lançada em julho de 2020.

image

Devido à incompatibilidade com as versões mais recentes do Spring Boot, a comunidade vem adotando outras bibliotecas, como o SpringDoc.

Nesse artigo, você aprenderá de forma prática como migrar uma API para o SpringDoc utilizando o Spring na versão 3 ou superior.

Fazendo a Migração

Utilizaremos como exemplo o projeto ministrado pelo professor Gleyson Sampaio no curso "Criando uma API REST Documentada com Spring Web e Swagger", disponível aqui mesmo na plataforma da DIO.

Atualize a versão do Spring Boot Starter para a 3.0.0 ou superior.

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>3.0.3</version>
 <relativePath/> <!-- lookup parent from repository -->
</parent>

Atualize também a versão do Java para 17 ou superior, pois o Spring Boot 3 tem esse requisito como obrigatório.

<properties>
 <java.version>17</java.version>
</properties>

Atenção: Lembre de atualizar o Java em sua IDE.

No IntelliJ vá em File > Project Structure... > Project > SDK e altere a versão do Java para 17.

Remova as duas dependências do SpringFox.

<!-- SWAGGER DOCUMENTACAO -->

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

Adicione as dependências do SpringDoc na versão 2 ou superior.

<dependency>
 <groupId>org.springdoc</groupId>
 <artifactId>springdoc-openapi-starter-common</artifactId>
 <version>2.0.0</version>
</dependency>
<dependency>
 <groupId>org.springdoc</groupId>
 <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
 <version>2.0.0</version>
</dependency>

Na classe “SwaggerConfig”, apague a anotação "@EnableSwagger2"

@Configuration
public class SwaggerConfig {

Remova os métodos “informacoesApi()” e "contato()"

private Contact contato() {
  return new Contact(
          "Seu nome",
          "http://www.seusite.com.br",
          "voce@seusite.com.br");
}

private ApiInfoBuilder informacoesApi() {

  ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();

  apiInfoBuilder.title("Title - Rest API");
  apiInfoBuilder.description("API exemplo de uso de Springboot REST API");
  apiInfoBuilder.version("1.0");
  apiInfoBuilder.termsOfServiceUrl("Termo de uso: Open Source");
  apiInfoBuilder.license("Licença - Sua Empresa");
  apiInfoBuilder.licenseUrl("http://www.seusite.com.br");
  apiInfoBuilder.contact(this.contato());

  return apiInfoBuilder;

}

E adicione o bean "openAPI()" que fará a função dos métodos removidos.

@Bean
public OpenAPI openAPI() {
  return new OpenAPI()
          .info(new Info()
                  .title("Title - Rest API")
                  .description("API exemplo de uso de Springboot REST API")
                  .version("1.0")
                  .termsOfService("Termo de uso: Open Source")
                  .license(new License()
                          .name("Apache 2.0")
                          .url("http://www.seusite.com.br")
                  )
          ).externalDocs(
                  new ExternalDocumentation()
                  .description("Seu nome")
                  .url("http://www.seusite.com.br"));
}

Por fim, remova o bean "detalheApi()"

@Bean
public Docket detalheApi() {
  Docket docket = new Docket(DocumentationType.SWAGGER_2);

  docket
          .select()
          .apis(RequestHandlerSelectors.basePackage("com.dio.controller"))
          .paths(PathSelectors.any())
          .build()
          .apiInfo(this.informacoesApi().build())
          .consumes(new HashSet<String>(Arrays.asList("application/json")))
          .produces(new HashSet<String>(Arrays.asList("application/json")));

  return docket;
}

E adicione a seguinte propriedade no arquivo "application.properties"

springdoc.packagesToScan=com.dio

Conclusão

Com os passos acima será possível fazer a migração do SpringFox para o SpringDoc. O repositório com a migração está disponível aqui.

Muito obrigado!

Compartilhe
Comentários (1)
Enoque Neres
Enoque Neres - 28/09/2023 01:35

Obrigado por me salvar! Estava apanhando pra tentar colocar a sugestão do Gleyson do Swagger 3 e não estava dando certo, pois uso o Java 17 e Spring Boot 3.0.0 + e a sua dica funcionou. A API com Swagger ficou bem intuitiva em relação ao Postman, e inclusive vou usar nas outras API que já tenho existentes. Valeu mesmo, abraço e sucesso! 🚀