如何在SpringDoc UI中对实体类、DTO类生成的Schemas排序?
SpringDoc UI Schemas排序解决方案
你已经搞定了标签和操作的排序,剩下Schemas的排序确实没有直接的YAML配置项,不过可以通过两种方式来实现,看你具体需求:
一、对Schemas列表(所有实体/DTO类的Schema)进行字母排序
SpringDoc没有提供现成的配置开关,但可以通过自定义OpenApiCustomizer来手动排序Schemas:
创建一个Spring配置类,添加如下Bean:
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.Schema; import org.springdoc.core.customizers.OpenApiCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; @Configuration public class SpringDocSchemaSortConfig { @Bean public OpenApiCustomizer schemaAlphabeticalSortCustomizer() { return openApi -> { Map<String, Schema> schemas = openApi.getComponents().getSchemas(); if (schemas != null && !schemas.isEmpty()) { // 按Schema名称(类名)字母排序,用LinkedHashMap保持顺序 Map<String, Schema> sortedSchemas = schemas.entrySet() .stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldVal, newVal) -> oldVal, LinkedHashMap::new )); openApi.getComponents().setSchemas(sortedSchemas); } }; } }
这段代码会在OpenAPI文档生成时,自动把所有Schemas按名称字母排序,重启服务后Swagger UI的Schemas标签下就会看到有序的列表了。
二、对单个Schema内部的属性进行排序
如果你是希望实体/DTO类的字段在Schema详情里按指定顺序排列,可以给每个字段添加@Schema注解的order属性:
import io.swagger.v3.oas.annotations.media.Schema; public class UserDTO { @Schema(description = "用户唯一ID", order = 1) private Long id; @Schema(description = "用户昵称", order = 2) private String nickname; @Schema(description = "注册邮箱", order = 3) private String email; }
字段会按照order值从小到大的顺序在Schema详情中展示,数值越小越靠前。
内容的提问来源于stack exchange,提问作者SSK
相关产品推荐
相关产品推荐

