我想在我的Rest API(spring-mvc)文档中使用Springfox SwaggerUI。 我在@RequestMapping注释中使用版本标题,但如果我有两个版本的相同方法,在SwaggerUI中我只能看到一个。
例如:
@GetMapping(value = "/users", headers = "X-API-VERSION=1")
public List<User> getUsersV1(){...}
@GetMapping(value = "/users", headers = "X-API-VERSION=2")
public List<User> getUsersV2(){...}
上面的代码只会在api文档中显示一个方法。
是否有任何选项可以将Swagger配置为考虑我的版本标题而使用不同的端点?
答案 0 :(得分:0)
Swagger通过其端点识别服务。
每个功能必须响应不同的端点,不应使用该功能的标头。
如果您正在使用REST服务,请阅读有关Restfull的内容并遵循其原则。此网址可以为您提供帮助:http://docs.oracle.com/javaee/6/tutorial/doc/gijqy.html
答案 1 :(得分:0)
现在我可以在生成的文档中看到我的所有方法。
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE + 70)
public class VersionPathDecorator implements PathDecorator {
private final static Logger logger = LoggerFactory.getLogger(VersionPathDecorator.class);
@Override
public Function<String, String> decorator(PathContext context) {
return (path) -> {
StringBuilder sb = new StringBuilder(path);
Field parent = null;
try {
parent = PathContext.class.getDeclaredField("parent");
parent.setAccessible(true);
RequestMappingContext rmc = (RequestMappingContext) parent.get(context);
rmc.headers()
.stream()
.filter(h -> RequestHeader.X_API_VERSION.headerName.equals(h.getName()))
.map(NameValueExpression::getValue)
.findFirst()
.ifPresent(v -> sb.append("#v").append(v));
} catch (NoSuchFieldException | IllegalAccessException e) {
logger.error("path decoration failed", e);
}
return sb.toString();
};
}
@Override
public boolean supports(DocumentationContext documentationContext) {
return true;
}
}