我有一个Spring Swagger应用程序,我可以在localhost上成功运行。但是当我在Heroku上运行相同的项目时,我收到以下错误:
XMLHttpRequest无法加载http://force-com-rest-swagger.herokuapp.com/api/doc/api/v1/account。 Access-Control-Allow-Origin不允许原点https://force-com-rest-swagger.herokuapp.com。
下面是我的swagger js config:
<script type="text/javascript" th:inline="javascript">
$(document).ready(function () {
displaySwaggerDocuments();
function displaySwaggerDocuments() {
var url = '<c:url value="/api/resourceList"/>';
window.swaggerUi = new SwaggerUi({
discoveryUrl: url,
dom_id: "swagger-ui-container",
supportHeaderParams: false,
supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
apiKey: "",
onComplete: function (swaggerApi, swaggerUi) {
if (console) {
console.log("Loaded SwaggerUI")
console.log(swaggerApi);
console.log(swaggerUi);
}
$('pre code').each(function (i, e) {
hljs.highlightBlock(e)
});
},
onFailure: function (data) {
if (console) {
console.log("Unable to Load SwaggerUI");
console.log(data);
}
},
docExpansion: "none"
});
window.swaggerUi.load();
}
});
</script>
有什么建议吗?
答案 0 :(得分:1)
基本上,您需要在服务器中启用CORS - 也许您的localhost启用了它,但Heroku中没有启用它(我对Heroku一无所知)。
您需要服务器返回以下标题:
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT
Access-Control-Allow-Origin:*
通常,这是通过添加一个过滤器来完成的,该过滤器将其添加到所有Swagger请求(源自您的Swagger UI的请求)
您可以在 Swagger sources.
更新:我到Swagger来源中确切位置的链接已经死了;这是their current repository.
的链接答案 1 :(得分:1)
解决方案是设置basePath:
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.knappsack.swagger4springweb.controller.ApiDocumentationController;
@Controller
@RequestMapping("/api")
public class ApiController extends ApiDocumentationController{
public ApiController() {
setBasePath("https://force-com-rest-swagger.herokuapp.com");
setBaseControllerPackage("com.example.controller.api");
setBaseModelPackage("com.example.model");
setApiVersion("v1");
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String documentation() {
return "api";
}
}