如何编写自定义分类器,在UI中按名称对springdoc swagger标签进行排序



我使用的是最新版本(1.3.0(的springdoc openapi。现在我想按"name">属性对UI中的标记进行排序。

我知道"springdoc.swagger-ui.tagsSorter"配置,并且我可以使用自定义的分拣器功能。但我找不到函数应该是什么样子的例子。

我尝试了以下似乎不起作用:

springdoc.swagger ui.tagsSorter=(a,b(=>a.get("name"(.localeCompare(b.get("name"((

参考@brianbro的答案,如https://springdoc.org/faq.html#how-can-i-sort-endpoints字母

我添加了

@Tag(name="1. Admin endpoints")

@Tag(name = "2. Everyone's enpoints!")

和下面的道具到应用程序。yml:

springdoc.swagger-ui.tagsSorter=alpha

在我的招摇UI上可以看到它们按照编号排序。

默认情况下,您可以按字母顺序对标签进行排序:

  • https://springdoc.org/faq.html#how-can-i-sort-endpoints

您可以使用OpenApiCustomiser控制标签顺序,并定义自己的Comparator:

@Bean
public OpenApiCustomiser sortTagsAlphabetically() {
return openApi -> openApi.setTags(openApi.getTags()
.stream()
.sorted(Comparator.comparing(tag -> StringUtils.stripAccents(tag.getName())))
.collect(Collectors.toList()));
}

用于在OpenApi中对模式、路径和标记进行排序。

@Bean
public OpenApiCustomiser openApiCustomiser() {
return openApi -> {
Map<String, Schema> schemas = openApi.getComponents().getSchemas();
openApi.getComponents().setSchemas(new TreeMap<>(schemas));
};
}
@Bean
public OpenApiCustomiser sortPathsAndTagsAlphabetically() {
return openApi -> {
Map<String, PathItem> paths = openApi.getPaths();
Paths sortedPaths = new Paths();
TreeMap<String, PathItem> sortedTree = new TreeMap<String, PathItem>(paths);
Set<Map.Entry<String, PathItem>> pathItems = sortedTree.entrySet();
Map<String, Map.Entry<String, PathItem>> distinctTagMap = new TreeMap<String, Map.Entry<String, PathItem>>();
for ( Map.Entry<String, PathItem> entry:pathItems) {
PathItem pathItem = entry.getValue();
Operation getOp = pathItem.getGet();
if(getOp != null) {
String tag = getOp.getTags().get(0);
if (!distinctTagMap.containsKey(tag)) {
distinctTagMap.put(tag, entry);
}
}
Operation postOp = pathItem.getPost();
if(postOp != null){
String tag1 = postOp.getTags().get(0);
if(!distinctTagMap.containsKey(tag1)){
distinctTagMap.put(tag1,entry);
}
}
Operation putOp = pathItem.getPut();
if(putOp != null) {
String tag2 = putOp.getTags().get(0);
if (!distinctTagMap.containsKey(tag2)) {
distinctTagMap.put(tag2, entry);
}
}
}
LinkedHashMap<String, PathItem> customOrderMap = new LinkedHashMap<String, PathItem>();
for (Map.Entry<String, PathItem> entry: distinctTagMap.values()) {
customOrderMap.put(entry.getKey(), entry.getValue());
}
for(Map.Entry<String, PathItem> entry : sortedTree.entrySet()) {
customOrderMap.putIfAbsent(entry.getKey(), entry.getValue());
}
sortedPaths.putAll(customOrderMap);
openApi.setPaths(sortedPaths);
};
}

最新更新