Swagger Spring - 编辑网址

时间:2015-09-17 17:46:16

标签: java spring-mvc swagger swagger-ui

我正在使用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'?我可以以某种方式覆盖它吗?

2 个答案:

答案 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并帮助我解决问题。