2016-02-01 10 views
5

Quello che ho fatto è utilizzare Grizzly/Jersey per ospitare swagger-ui, che è contenuto statico.Maglia 2: render correttamente il contenuto statico di Swagger senza barra finale (/)

Ecco parte di build.gradle:

compile 'org.glassfish.jersey.core:jersey-server:2.22.1' 
compile 'org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.22.1' 
compile 'org.glassfish.jersey.containers:jersey-container-grizzly2-servlet:2.22.1' 

Ecco come configurare contenuti statici con Grizzly:

httpServer = GrizzlyWebContainerFactory.create(uri); 
httpServer.getServerConfiguration().addHttpHandler(new StaticHttpHandler("swagger-ui"), "/swagger"); 

swagger-ui è la cartella nella cartella principale del progetto.

Tutto va bene quando accedo http://localhost/swagger/ ma quando provo http://localhost/swagger, dà solo una semplice pagina senza rendering, che sembra tutti i file css/js mancano: enter image description here

mi chiedo qual è il il modo migliore per rendere l'url senza la barra finale (/) uguale a quella con la barra finale.

Aggiornamento: ho sollevato un biglietto per spavalderia-ui: https://github.com/swagger-api/swagger-ui/issues/1966 ma è detto che è un problema di configurazione con Grizzly quindi un altro biglietto per Grizzly: https://java.net/jira/browse/GRIZZLY-1823

Nessuna soluzione trovata oggi. Sto pensando di usare un altro server web.

+0

qualsiasi aggiornamento su questo? – Charlie

+2

verrà risolto in Grizzly 2.3.25 – alexey

risposta

0

Posso confermare che (come commentato da Alexey) questo da allora è stato risolto in una versione recente di Grizzly.

è possibile aggiungere questo al vostro pom.xml o aggiornare il numero di versione

<dependency> 
    <groupId>org.glassfish.grizzly</groupId> 
    <artifactId>grizzly-http-server</artifactId> 
    <version>2.3.28</version> 
</dependency> 

E Grizzly tornerà automaticamente un reindirizzamento 301 dal URL senza la barra finale, ad uno con la barra finale.

0

Credo che si sia desidera mappare il file HTML spavalderia-ui.html o per servire il barattolo si potrebbe provare questo html server grizzly+jersey (.html from .jar archive)

UPDATE:

Il problema è con l'instradamento Grizzly. Per esempio. se controlli il registro degli errori del tuo browser, vedrai che sta tentando di caricare da http://localhost:18888/css/typography.css non http://localhost:18888/swagger/css/typography.css.

Non sono riuscito a trovare alcuna informazione su come Grizzly esegua il routing e sembra essere incoerente. Per esempio. http://localhost/swagger carica index.html, ma non swagger-ui.js, entrambi sullo stesso percorso. Ho usato altri server come Nginx per servire file statici e non ho avuto alcun problema come noi.

Una soluzione è quella di mappare ogni cartella spavalderia-ui separatamente o si potrebbe distribuire Swagger come un singolo JAR utilizzando l'this come ho già detto nei commenti. Ho anche considerato l'utilizzo di caratteri jolly come discusso here, ma non ho avuto fortuna.

httpServer.getServerConfiguration().addHttpHandler(new StaticHttpHandler("<basepath>/lib"),"/lib"); 
    httpServer.getServerConfiguration().addHttpHandler(new StaticHttpHandler("<basepath>/css"),"/css"); 
... 
+0

potresti elaborare come mappare il file HTML swagger-ui.html? – DerekY

+0

Stai anche ospitando un documento Swagger generato dinamicamente? Ad esempio ospitiamo i nostri documenti e swagger ui utilizzando Springfox che si occupa della configurazione del server Web per ospitare swagger ui vedi http://springfox.github.io/springfox/docs/snapshot/ – Charlie

+0

Sì, userò 'swagger ' 'per esportare la mia riposante API. Ma per 'swagger ui', utilizzo solo il contenuto statico scaricato da guihub – DerekY

Problemi correlati