繁体   English   中英

Jersey 2:正确渲染Swagger静态内容而不用斜杠(/)

[英]Jersey 2: render Swagger static content correctly without trailing slash(/)

我做的是使用Grizzly / Jersey来主持swagger-ui ,这是静态内容。

这是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'

以下是使用Grizzly配置静态内容的方法:

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

swagger-ui是项目根文件夹下的文件夹。

当我访问http://localhost/swagger/时, 一切都很好,但是当我尝试http://localhost/swagger ,它只提供一个没有渲染的简单页面,似乎缺少所有css / js文件: 在此输入图像描述

我想知道在没有尾部斜杠(/)的情况下制作url的最佳方法是什么是与尾部斜杠相同的方法。

更新:我已经提出了票招摇的UI: https://github.com/swagger-api/swagger-ui/issues/1966但它说,它是一个配置问题与Grizzly如此另一票GrizzlyHTTPS:/ /java.net/jira/browse/GRIZZLY-1823

现在找不到解决方案。 我正在考虑使用另一个Web服务器。

我相信你要么想要映射到HTML文件swagger-ui.html,要么提供jar你可以尝试这个html服务器grizzly + jersey(.html来自.jar存档)

更新:

问题在于Grizzly路由。 例如,如果您检查浏览器错误日志,您将看到它正在尝试从http:// localhost:18888 / css / typography.css加载而不是http:// localhost:18888 / swagger / css / typography.css

我找不到关于Grizzly如何进行路由的任何信息,而且似乎不一致。 例如http:// localhost / swagger加载index.html罚款,但不是swagger-ui.js,它们都在同一条路径上。 我已经使用像Nginx这样的其他服务器来提供静态文件,并且没有像我们这样的任何问题。

一种解决方法是分别映射每个招摇的用户界面的文件夹,或者你可以通过使用部署扬鞭作为一个单一的JAR 这个 ,因为我已经在评论中说。 我也看过这里讨论的使用通配符,但没有任何运气。

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

我可以确认(由alexey评论)这已经在最近版本的Grizzly中得到修复。

您可以将其添加到pom.xml或更新版本号

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

并且Grizzly将自动从没有尾部斜杠的url返回301重定向到带有斜杠的一个重定向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM