Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Localização da Documentação Gerada com o CustomSwaggerConfigurations

Rodrigo,

Conforme comentei em tópico anterior, após alternar da classe SwaggerConfigurations para a CustomSwaggerConfigurations, não estamos conseguindo fazer o projeto, digo a documentação, rodar adequadamente no servidor.

Após analisar com mais calma o problema, percebi que o erro: "Failed to load API definition", "undefined /v2/api-docs" ocorre apenas no servidor e não no localhost, porque eu atribui "/v2/api-docs" à url no arquivo index.html da pasta src/main/resources/swagger-ui.

Dessa forma, no localhost, está funcionando direitinho porque esse index.html procura a documentação em http://localhost:8080/v2/api-docs, mas no servidor (teste, homologação ou produção, mas ainda estamos no de testes), a documentação está em http://SERVIDOR:PORTA/APLICACAO/v2/api-docs e com essa configuração de url que coloquei no html ele está tentando procurar a documentação em http://SERVIDOR:PORTA/v2/api-docs (sem o contexto do projeto), por isso não está funcionando. Dá aquele erro "Failed to load API definition", "undefined /v2/api-docs". E, realmente, não pode ser assim, porque só pra começar, criamos duas aplicações API Rest no mesmo formato do API Forum que fizemos no curso.

Trecho do html:

<script>
  window.onload = function() {
      // Begin Swagger UI call region
      const ui = SwaggerUIBundle({
        url: "/v2/api-docs",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      })
      // End Swagger UI call region

      window.ui = ui
    }
</script>

Alguma sugestão?

Grata, Suzane

2 respostas
solução!

Oi Suzane,

Nesse caso o problema é por conta de haver um context path nos ambientes de homologação e produção.

A solução mais simples seria passar a utilizar o mesmo context-path em desenvolvimento também, para que localmente a app seja acessada em: http://localhost:8080/aplicacao

Basta adicionar no application.properties:

server.servlet.context-path=aplicacao

E nos arquivos estáticos, página index.html por exemplo, trocar o link para:

url: "/aplicacao/v2/api-docs",

Valeu, Rodrigo! Muito obrigada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software