我正在使用Spring Swagger库v1.0.2
的Maven:
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>1.0.2</version>
</dependency>
我能够扫描我的REST API并在Swagger UI上查看它。我甚至已经实施了OAuth,它运作良好。
我有一个独特的要求。我的控制器将@RequestMapping注释为
@RequestMapping("/unauthorize")
@Controller
public class SomeController {
@RequestMapping(method = RequestMethod.GET, value = "/preferences/{preferenceName}")
public SomeModel getDisplayPreference( @PathVariable("preferenceName") final String preferenceName ) {
}
}
可以假设要访问getDisplayPreference()方法,需要以下URL:
http://www.example.com/<some-context>/unauthorize/preferences/somepreferencename
Swagger假设并且在Swagger UI中的“试用”功能尝试点击上述网址。
但是,在我们的代码中,还有一个额外的URL部分,如下所示
http://www.example.com/<some-context>/unauthorize/rest-resource/preferences/somepreferencename
所以你看到有'rest-resource'需要成为URL的一部分来进行正确的调用。由于Swagger UI不知道'rest-resource' - 这不是它的错 - 每次调用都会失败。
有没有办法可以强制Swagger在网址中加入'rest-resource'?我可以以某种方式覆盖它吗?
答案 0 :(得分:1)
您的Swagger配置是什么样的?您可以在那里设置基本路径。
请参阅此博客 - http://jakubstas.com/spring-jersey-swagger-configuration/#.VfsJxxHBwXA。这里还有一个相关的讨论 - https://github.com/swagger-api/swagger-ui/issues/276。
答案 1 :(得分:0)
我找到了答案。
在swagger-ui.js下的方法:
SwaggerSpecConverter.prototype.declaration = function(obj, swagger) {}
有一段代码:
for(i = 0; i < obj.apis.length; i++) {
var api = obj.apis[i];
var path = api.path;
var operations = api.operations;
this.operations(path, obj.resourcePath, operations, resourceLevelAuth, swagger);
}
我将其更新为:
for(i = 0; i < obj.apis.length; i++) {
var api = obj.apis[i];
var path = '/rest-resource'+api.path;
var operations = api.operations;
this.operations(path, obj.resourcePath, operations, resourceLevelAuth, swagger);
}
这会在所有路径之前添加/ rest-resource并帮助我解决问题。