Обработка нескольких basepath в swagger
Я использую swagger-ui для предоставления хорошей документации для REST API нашим клиентам.
Внутри у нас есть две разные среды, в которых Дженкин строит проект.
Е. Г. суэггер.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
swagger api basepath в интернете.xml:
<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. Однако он должен был ударить http://www.myhost.com/xyz/rest/getAUser
для host1, но он попадает в url http://www.myhost.com/rest/getAUser
.
есть ли способ указать несколько basepath для разных URL-адресов.
мой HTML swagger-ui выглядит примерно так.
$(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",
......
......
}
1 ответов
я смог решить эту проблему, настроив swagger с помощью BeanConfig вместо использования сервлета в интернете.в XML
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);
}
}
и в интернете.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>
и я сменил пом.xml, чтобы начать использовать последнюю стабильную версию swagger-jersey2-jaxrs:
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.3</version>
</dependency>