在使用knife4j的过程中 项目为spring cloud alibaba微服务架构 但在开发过程中 有些服务非必须启动的服务 但是进入knife4j管理页面过程中 由于下拉框第0个位置的服务为非必须启动 造成无法从页面选择其他服务
- 由于是微服务项目 swagger是集成在gateway上的
发现这个方法在启动过程中通过getRouteDefinitions()获取到了router的信息并add到swaggeruconfig中 - 查看SwaggerUiConfigParameters类
封装下拉框返回信息代码
/**
* Put.
*
* @param urls the urls
* @param swaggerUrls the swagger urls
* @param params the params
*/
private void put(String urls, Set<SwaggerUrl> swaggerUrls, Map<String, Object> params) {
Comparator<SwaggerUrl> swaggerUrlComparator;
if (groupsOrder.isAscending())
swaggerUrlComparator = Comparator.comparing(SwaggerUrl::getName);
else
swaggerUrlComparator = (h1, h2) -> h2.getName().compareTo(h1.getName());
swaggerUrls = swaggerUrls.stream().sorted(swaggerUrlComparator).filter(elt -> StringUtils.isNotEmpty(elt.getUrl())).collect(Collectors.toCollection(LinkedHashSet::new));
if (!CollectionUtils.isEmpty(swaggerUrls)) {
params.put(urls, swaggerUrls);
}
}
urls封装方法 sorted
3.结论
下拉框排序是根据router信息进行排序 字母为字母排序 加上数字会对数字进行排序 但是swagger是获取predicates作为名称 改掉yml predicates配置后前端路径还得修改
大家有什么好的方法欢迎交流 只是个人研究 从业务开发角度来说这种情况可处理可不处理