gpt4 book ai didi

java - Swagger 处理多个基本路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:08 25 4
gpt4 key购买 nike

我正在使用 swagger-ui 为我们的客户提供 REST API 的良好文档。在内部,我们有两个不同的环境 jenkin 将项目构建到。例如。 swagger.json 在两种环境中都可以访问:http://www.myhost.com/xyz/rest/swagger.json
https://www.myhost2.com/rest/swagger.json

文档可作为:http://www.myhost.com/xyz/dist/index.html
https://www.myhost2.com/dist/index.html

web.xml 中的 swagger api basepath 是:

<init-param>       
<param-name>swagger.api.basepath</param-name>
<param-value>/rest</param-value>
</init-param>

问题:我正在尝试使用文档页面上的“试用”功能。两台主机各自的请求url如下:http://www.myhost.com/rest/getAUser
https://www.myhost2.com/rest/getAUser

它适用于 host2,因为它访问了正确的 url。但是它应该为 host1 点击 http://www.myhost.com/xyz/rest/getAUser 但它正在点击 url http://www.myhost.com/rest/getAUser.

有没有一种方法可以为不同的 url 指定多个基本路径。

我的 swagger-ui html 看起来像这样。

$(function () {
var href = window.location.href;
var url = href.substring(0, href.lastIndexOf("/dist"));
console.log(url);
// Pre load translate...
if(window.SwaggerTranslator) {
window.SwaggerTranslator.translate();
}
window.swaggerUi = new SwaggerUi({
url: url + "/rest/swagger.json",
dom_id: "swagger-ui-container",
......
......
}

最佳答案

我能够通过使用 BeanConfig 配置 swagger 而不是在 web.xml 中使用 Servlet 来解决这个问题

BeanConfig 类:

public class SwaggerBootstrap extends DefaultJaxrsConfig {

/**
*
*/
private static final long serialVersionUID = myAutoGeneratedID;

@Override
public void init(ServletConfig config) throws ServletException {

super.init(config);
//contextPath will be null for host2 and /xyz for host1.
String contextPath = config.getServletContext().getContextPath();

BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0.0");
beanConfig.setTitle("My API Documentation");
beanConfig.setSchemes(new String[] {
"http", "https"
});
beanConfig
.setResourcePackage("com.example.my.rest.api.package");

beanConfig.setBasePath(contextPath + "/rest");
beanConfig.setScan(true);
}
}

在 web.xml 中:

<servlet>
<servlet-name>SwaggerBootstrap</servlet-name>
<servlet-class>my.package.to.SwaggerBootstrap</servlet-class>
<init-param>
<!-- This make sure that all resources are scanned whether or not they use Swagger Annotations.
https://github.com/swagger-api/swagger-samples/tree/master/java/java-jaxrs-no-annotations -->
<param-name>scan.all.resources</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

然后我更改了 pom.xml 以开始使用最新稳定版本的 swagger-jersey2-jaxrs:

<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.3</version>
</dependency>

关于java - Swagger 处理多个基本路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com