ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Scalar Spring Boot 集成实战:自动配置、类型安全枚举与 API Reference 接入指南

Scalar Spring Boot 集成实战:自动配置、类型安全枚举与 API Reference 接入指南 Scalar Spring Boot 集成实战自动配置、类型安全枚举与 API Reference 接入指南【免费下载链接】scalarScalar is an open-source API platform: Modern REST API Client Beautiful API References ✨ 1st-Class OpenAPI/Swagger Support项目地址: https://gitcode.com/GitHub_Trending/sc/scalar本文基于 Scalar 仓库中的 Spring Boot 集成文档 展开系统讲解如何在 Spring Boot 应用中接入 Scalar WebJar 自动配置的 API Reference包括依赖引入、scalar.*配置体系、Actuator 端点暴露、认证信息预填API Key / OAuth2 / HTTP以及多 OpenAPI 文档sources配置并结合当前仓库integrations/java目录下的核心源码剖析自动配置条件、枚举类型安全绑定与 HTML 渲染流程。需要说明的是该文档自身已标注“obsolete”Scalar Java 集成现已被重构为scalar-core、scalar-webmvc、scalar-webflux三个模块最新的模块级文档见 Java 集成文档本文以原 Spring Boot 文档为骨架用当前仓库源码补充实现细节。环境要求与模块现状原 Spring Boot 文档给出的运行前提Spring Boot2.7.0 或更高推荐 3.xJava11 或更高推荐 17Maven3.6 或Gradle7.0而从当前仓库的模块结构看见 integrations/java 下的 pom.xml 及各子模块Java 集成已拆分为三个 Maven 模块模块坐标职责scalar-corecom.scalar.maven:scalar-core框架无关核心ScalarProperties、ScalarHtmlRenderer、枚举与认证模型仅依赖 Jacksonscalar-webmvccom.scalar.maven:scalar-webmvcSpring Boot WebMVC 集成Controller、自动配置、Actuator 端点scalar-webfluxcom.scalar.maven:scalar-webfluxSpring Boot WebFlux 集成ScalarProperties的核心字段定义在 ScalarProperties.java 中其中url的默认值为https://registry.scalar.com/scalar/apis/galaxy?formatjson示例文档enabled默认falsepath默认/scalar——与原 Spring Boot 文档的配置参数表完全一致。破坏性变更与迁移步骤原文档针对旧版 WebJar 的字符串属性给出了明确的迁移说明。以下内容必须完整掌握因为大量存量 Spring Boot 项目仍在使用旧的字符串 setter。字符串属性被枚举属性取代以下基于字符串的字段及其 getter/setter 已被类型安全枚举取代theme字段与getTheme()/setTheme()方法layout字段与getLayout()/setLayout()方法documentDownloadType字段与getDocumentDownloadType()/setDocumentDownloadType()方法ScalarSource类也从ScalarProperties的嵌套类移到了config包下的独立类旧位置com.scalar.maven.webjar.ScalarProperties.ScalarSource新位置com.scalar.maven.webjar.config.ScalarSource三类场景的迁移操作场景一application.properties / application.yml 配置——无需改动。Spring Boot 会自动把字符串值转换为枚举# 这段配置在迁移后仍然完全有效 scalar.themedeepSpace scalar.layoutmodern scalar.documentDownloadTypeboth场景二程序化配置——改用枚举 setter// 旧写法迁移后会编译报错 properties.setTheme(deepSpace); properties.setLayout(modern); properties.setDocumentDownloadType(both); // 新写法枚举类型安全 setter properties.setTheme(ScalarTheme.DEEP_SPACE); properties.setLayout(ScalarLayout.MODERN); properties.setDocumentDownloadType(DocumentDownloadType.BOTH);场景三使用 ScalarSource 类——更新 import 与引用// 旧写法迁移后会编译报错 import com.scalar.maven.webjar.ScalarProperties.ScalarSource; ScalarProperties.ScalarSource source new ScalarProperties.ScalarSource(); // 新写法独立类 import com.scalar.maven.webjar.config.ScalarSource; ScalarSource source new ScalarSource();字符串到枚举的转换在当前源码中由每个枚举自带的JsonCreator方法实现例如 ScalarTheme.java 中的fromValue(String)JsonCreator public static ScalarTheme fromValue(String value) { for (ScalarTheme theme : values()) { if (theme.value.equals(value)) { return theme; } } throw new IllegalArgumentException(Unknown theme: value); }因此scalar.themedeepSpace这样的属性值会被精确匹配到DEEP_SPACE其JsonValue为deepSpace序列化回前端 JSON 时保持小驼峰而非法值会直接抛出IllegalArgumentException这是“类型安全”的关键体现。当前模块下的等价枚举位于 enums/ScalarTheme.java、enums/ScalarLayout.java、enums/DocumentDownloadType.java。依赖引入与基本配置Maven原 Spring Boot 文档给出的 WebJar 依赖为dependency groupIdcom.scalar.maven/groupId artifactIdscalar/artifactId version0.1.0/version /dependencyGradledependencies { implementation com.scalar.maven:scalar:0.1.0 }Kotlin DSLbuild.gradle.ktsdependencies { implementation(com.scalar.maven:scalar:0.1.0) }如果项目使用了 Spring Boot 的 parent POM依赖版本管理会自动处理否则需要显式指定版本。按当前仓库的模块化重构WebMVC 应用应改用scalar-webmvcWebFlux 应用用scalar-webflux版本以 Java 集成文档 中的说明为准dependency groupIdcom.scalar.maven/groupId artifactIdscalar-webmvc/artifactId versionX.X.X/version /dependency最小可用配置在application.properties中配置 OpenAPI 文档地址# 启用/禁用 Scalar API Reference默认: false scalar.enabledtrue # OpenAPI 文档 URL scalar.urlhttps://example.com/openapi.json # 可选: 自定义路径默认: /scalar scalar.path/docsapplication.yml等价写法scalar: url: https://example.com/openapi.json path: /docs enabled: true之后访问http://localhost:8080/scalar或自定义路径即可看到 API Reference。请求处理链路源码视角配置生效后实际处理请求的是scalar-webmvc模块的控制器 ScalarWebMvcController.javaGetMapping(${scalar.path:/scalar}) public final ResponseEntityString getDocs(HttpServletRequest request) throws IOException { ScalarProperties properties propertiesProvider.getObject(); ScalarProperties configuredProperties configureProperties(properties, request); String html ScalarHtmlRenderer.render(configuredProperties); return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(html); }可以看到三个要点路由由scalar.path驱动GetMapping(${scalar.path:/scalar})直接读取配置属性默认/scalar与文档中“默认路径/scalar”的描述一致。每次请求获取新的配置实例propertiesProvider注入的是ObjectProviderSpringBootScalarProperties。查看 SpringBootScalarProperties.java 可知其标注了Scope(prototype)即每个请求拿到全新的ScalarProperties实例可以安全地按请求做动态修改而不影响并发请求。另有一个静态资源端点${scalar.path}/scalar.jsgetScalarJs()方法通过ScalarHtmlRenderer.getScalarJsContent()从 WebJar 内读取 JS bundle这就是“控制器 静态资源”两个自动配置部件的来源。仓库中提供了可运行的示例应用PlaygroundApplication.javaWebMVC以及演示扩展控制器钩子的 CustomScalarWebMvcController.java另有 ScalarWebMvcControllerTest.java 对渲染与 JS 端点行为做测试验证。自动配置与条件装配原文档说明 Scalar 集成会自动配置三部分内容ScalarController提供 API Reference 页面、ScalarProperties配置属性绑定、静态资源JS bundle 与 HTML 模板。当前scalar-webmvc模块的自动配置类是 ScalarWebMvcAutoConfiguration.java其条件注解与文档描述逐条对应Configuration EnableConfigurationProperties(SpringBootScalarProperties.class) ConditionalOnProperty(prefix scalar, name enabled, havingValue true, matchIfMissing true) public class ScalarWebMvcAutoConfiguration { Bean ConditionalOnMissingBean(ScalarWebMvcController.class) public ScalarWebMvcController scalarWebMvcController() { return new ScalarWebMvcController(); } Bean ConditionalOnProperty(prefix scalar, name actuatorEnabled, havingValue true) ConditionalOnClass(name org.springframework.boot.actuate.endpoint.annotation.Endpoint) ConditionalOnAvailableEndpoint(endpoint ScalarWebMvcActuatorEndpoint.class) public ScalarWebMvcActuatorEndpoint scalarWebMvcActuatorEndpoint() { return new ScalarWebMvcActuatorEndpoint(); } }对照文档的“Conditional Configuration”一节文档描述的条件源码中的实现scalar.enabledtrueConditionalOnProperty(prefix scalar, name enabled, havingValue true, matchIfMissing true)属性缺失时条件视为满足即 Bean 默认注册Spring Boot web starter 存在通过ConditionalOnClass对 Actuator 类、以及 WebMVC 运行环境HttpServletRequest等的类路径条件不存在已有的 ScalarController BeanConditionalOnMissingBean(ScalarWebMvcController.class)排除自动配置的两种方式原文档给出SpringBootTestApplication(exclude ScalarAutoConfiguration.class) public class MyApplication { // ... }或者在application.properties中spring.autoconfigure.excludecom.scalar.maven.webjar.ScalarAutoConfiguration注上例为旧版 WebJar 的类名在模块化结构下对应类为com.scalar.maven.webmvc.ScalarWebMvcAutoConfiguration或com.scalar.maven.webflux.ScalarWebFluxAutoConfiguration排除时请以实际依赖模块为准。完整配置属性参考原 Spring Boot 文档给出的完整属性表如下默认值已与当前ScalarProperties源码逐一核对属性默认值说明scalar.enabledfalse启用/禁用 Scalar API Referencescalar.path/scalarAPI Reference 的访问路径scalar.urlhttps://registry.scalar.com/scalar/apis/galaxy?formatjsonOpenAPI 文档 URLscalar.actuatorEnabledfalse是否以 Actuator 端点形式暴露在/actuator/scalarscalar.showSidebartrue是否显示侧边栏scalar.hideModelsfalse是否从侧边栏、搜索和内容中隐藏模型components.schemas 或 definitionsscalar.hideTestRequestButtonfalse是否隐藏 “Test Request” 按钮scalar.hideSearchfalse是否显示侧边栏搜索框false 表示显示scalar.customCssnull注入到 API Reference 的自定义 CSSscalar.themedefault主题可选值见下文“可用主题”scalar.layoutmodern布局风格modern或classicscalar.darkModefalse初始是否深色模式false 为浅色scalar.hideDarkModeTogglefalse是否显示深色模式切换按钮scalar.forceThemeModenull强制主题模式light或darkscalar.operationTitleSourcenull操作标题来源path或summaryscalar.tagSorternull标签排序alpha或orderscalar.operationSorternull操作排序alpha或methodscalar.schemaPropertyOrdernullSchema 属性排序alpha或orderscalar.documentDownloadTypeboth文档下载类型json、yaml、both、nonescalar.searchHotKeynull搜索快捷键如ctrlkscalar.serversnull服务器配置列表scalar.defaultHttpClientnull默认 HTTP 客户端配置上述每个字段都能在 ScalarProperties.java 中找到对应私有字段与 Javadoc例如searchHotKeyL124对应“与 CTRL/CMD 组合打开搜索弹窗的按键”forceThemeModeL291对应“无视用户偏好强制指定主题状态”。类型安全配置与可用主题原文档强调“Spring Boot 自动把字符串值转换为枚举类型因此属性文件中仍可直接使用字符串”。其底层机制就是迁移一节提到的JsonCreatorJsonValue组合属性绑定按JsonValue声明的字符串值如deepSpace反序列化序列化回前端时又输出同样的字符串保证了 properties 文件写法不变。可用主题scalar.theme支持以下取值与 ScalarTheme.java 中 12 个枚举值一一对应alternate- 替代配色方案default- 默认主题moon- 月亮主题purple- 紫色配色solarized- Solarized 配色bluePlanet- 蓝色星球主题saturn- 土星主题kepler- 开普勒太空主题mars- 火星主题deepSpace- 深空主题laserwave- 激光波主题none- 不应用主题仅自定义样式布局选项scalar.layout支持modern- 现代布局默认classic- 经典布局文档下载类型scalar.documentDownloadType支持both- 同时显示 JSON 与 YAML 下载按钮默认json- 仅显示 JSON 下载按钮yaml- 仅显示 YAML 下载按钮none- 完全隐藏下载按钮认证配置API Key / OAuth2 / HTTP原文档的这一节价值很高Scalar 支持为 API 测试与文档预填认证信息方便开发者直接试用接口。开始配置前必须注意文档中的两条警示前提OpenAPI 文档中必须已定义好认证安全方案security schemes。Scalar 只能为规范中已存在的 scheme 预填信息且 Scalar 配置中的 scheme 名称必须与 OpenAPI 文档中的 scheme 名称完全一致例如文档中定义my-oauth-scheme配置里就必须用my-oauth-scheme。安全方案本身由 SpringDoc OpenAPI、Swagger 等生成器负责添加。安全警告预填的认证信息会在浏览器中可见严禁用于生产环境仅限开发与测试。API Key 认证# 安全方案名必须与 OpenAPI 文档中一致 scalar.authentication.apiKey.your-api-key.nameX-API-Key scalar.authentication.apiKey.your-api-key.valueyour-api-key-value # 首选安全方案单一方案 - 简化写法 scalar.authentication.preferredSecuritySchemeyour-api-key # 或多方案列表写法 # scalar.authentication.preferredSecuritySchemes[0]my-oauth-scheme # scalar.authentication.preferredSecuritySchemes[1]your-api-keyOAuth2 认证Authorization Code 流程# OAuth2 安全方案scheme 名必须与 OpenAPI 文档一致 scalar.authentication.oauth2.my-oauth-scheme.flows.authorizationCode.clientIdmy-client-id scalar.authentication.oauth2.my-oauth-scheme.flows.authorizationCode.clientSecretmy-client-secret scalar.authentication.oauth2.my-oauth-scheme.flows.authorizationCode.pkceSHA-256 scalar.authentication.oauth2.my-oauth-scheme.flows.authorizationCode.credentialsLocationbody scalar.authentication.oauth2.my-oauth-scheme.flows.authorizationCode.redirectUrihttp://localhost:8080/callback # 默认 OAuth 作用域该 scheme 的预选 scope scalar.authentication.oauth2.my-oauth-scheme.defaultScopes[0]read scalar.authentication.oauth2.my-oauth-scheme.defaultScopes[1]write # 首选安全方案 scalar.authentication.preferredSecuritySchememy-oauth-scheme # 或多方案列表写法 # scalar.authentication.preferredSecuritySchemes[0]my-oauth-scheme # scalar.authentication.preferredSecuritySchemes[1]your-api-keyHTTP 认证Basic / Bearer# HTTP Basicscheme 名必须与 OpenAPI 文档一致 scalar.authentication.http.my-basic-auth.usernamemy-username scalar.authentication.http.my-basic-auth.passwordmy-password # HTTP Bearer scalar.authentication.http.my-bearer-auth.tokenmy-bearer-tokenYAML 完整示例scalar: authentication: # scheme 名必须与 OpenAPI 文档中定义的一致 # 单一安全方案简化写法 preferredSecurityScheme: my-oauth-scheme # 或多方案列表写法 # preferredSecuritySchemes: # - my-oauth-scheme # - your-api-key # API Key 安全方案 apiKey: your-api-key: name: X-API-Key value: your-api-key-value # HTTP 安全方案Basic 与 Bearer http: my-basic-auth: username: my-username password: my-password my-bearer-auth: token: my-bearer-token # OAuth2 安全方案 oauth2: my-oauth-scheme: defaultScopes: - read - write flows: authorizationCode: clientId: my-client-id clientSecret: my-client-secret pkce: SHA-256 credentialsLocation: body redirectUri: http://localhost:8080/callback源码印证三张分类 Map 如何合并上述apiKey/http/oauth2三组“分类 Map”只是 Spring Boot 属性绑定的便捷入口。查看 ScalarAuthenticationOptions.java三个分类 Map 字段均标注JsonIgnore序列化时不直接输出每个分类的 setter如setOauth2在赋值后会调用私有方法mergeSecuritySchemes()清空并重建统一的securitySchemesMap将三类 scheme 按名称合并进去——最终前端拿到的是以OpenAPI scheme 名称为键的单一securitySchemes字典preferredSecurityScheme支持“单字符串”与“列表”两种写法Spring 绑定时调用setPreferredSecurityScheme(String)包装成单元素 ListJSON 反序列化时则由JsonSetter(preferredSecurityScheme)标注的setPreferredSecuritySchemeFromJson(Object)同时兼容 String 与 List并对非法类型抛出明确的IllegalArgumentException。OAuth2 方案模型 ScalarOAuth2SecurityScheme.java 中还有一个细节defaultScopes字段通过JsonProperty(x-default-scopes)映射到扩展字段说明预填的作用域会作为 OpenAPI 扩展属性传给前端。Actuator 端点支持原文档指出Scalar UI 可以作为 Spring Boot Actuator 端点暴露便于纳入应用的监控与管理基础设施。启用配置# 启用 actuator 支持 scalar.actuatorEnabledtrue # 暴露 scalar 端点 management.endpoints.web.exposure.includescalarapplication.yml写法scalar: actuatorEnabled: true management: endpoints: web: exposure: include: scalar启用后 Scalar UI 位于http://localhost:8080/actuator/scalar。实现上对应 ScalarWebMvcActuatorEndpoint.javaEndpoint(id scalar) WebEndpoint(id scalar) public class ScalarWebMvcActuatorEndpoint { ReadOperation(produces MediaType.TEXT_HTML_VALUE) public final ResponseEntityString scalarUi(HttpServletRequest request) throws IOException { ScalarProperties properties propertiesProvider.getObject(); ScalarProperties configuredProperties configureProperties(properties, request); String html ScalarHtmlRenderer.render(configuredProperties); return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(html); } ReadOperation(produces application/javascript) public final ResponseEntitybyte[] scalarJs() throws IOException { byte[] jsContent ScalarHtmlRenderer.getScalarJsContent(); return ResponseEntity.ok() .contentType(MediaType.valueOf(application/javascript)) .body(jsContent); } }可以看到 Actuator 端点与普通 Controller 复用同一套ScalarHtmlRenderer.render(...)渲染链路并且同样保留configureProperties钩子供子类扩展。其 Bean 的创建条件是三重叠加scalar.actuatorEnabledtrue、类路径存在 Actuator 的Endpoint注解类、且该端点在 Actuator 暴露配置中可用ConditionalOnAvailableEndpoint。端点行为有专门测试 ScalarWebMvcActuatorEndpointTest.java 覆盖。Actuator 安全使用 Actuator 端点时建议尤其在生产对其做安全保护。原文档给出两种思路# 启用 actuator 安全 management.security.enabledtrue # 或调整 actuator 基础路径 management.endpoints.web.base-path/actuator配合 Spring Security对/actuator/scalar要求认证、放行 healthConfiguration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authz - authz .requestMatchers(/actuator/scalar).authenticated() .requestMatchers(/actuator/health).permitAll() .anyRequest().permitAll() ) .formLogin(form - form.permitAll()); return http.build(); } }适用前提说明management.security.enabled是 Spring Boot 2.x 时代的写法在 Spring Boot 3.x 中通常直接依赖 Spring Security 默认的“actuator 端点需认证”策略或按上面示例显式配置requestMatchers。请以实际 Spring Boot 版本为准。多 OpenAPI 文档sources配置原文档支持通过sources在一次界面中展示多个 API并附带文档切换器。application.properties 写法# 多个 OpenAPI 文档 scalar.sources[0].urlhttps://api.example.com/v1/openapi.json scalar.sources[0].titleAPI v1 scalar.sources[0].slugapi-v1 scalar.sources[0].defaulttrue scalar.sources[1].urlhttps://api.example.com/v2/openapi.json scalar.sources[1].titleAPI v2 scalar.sources[1].slugapi-v2 scalar.sources[2].urlhttps://internal.example.com/openapi.json scalar.sources[2].titleInternal API scalar.sources[2].sluginternal-apiapplication.yml 写法scalar: sources: - url: https://api.example.com/v1/openapi.json title: API v1 slug: api-v1 default: true - url: https://api.example.com/v2/openapi.json title: API v2 slug: api-v2 - url: https://internal.example.com/openapi.json title: Internal API slug: internal-api各字段说明字段必填说明url是OpenAPI 规范的 URLtitle否API 显示标题缺省时自动生成slug否API 的 URL slug缺省时从 title 自动生成default否是否为默认源未指定时第一个源为默认使用 sources 时scalar.url属性将被忽略用户可通过界面中的文档选择器在不同 API 间切换。源码印证ScalarSource.java 正是迁移指南所说的“config 包下的独立类”字段为url必设、title、slug、isDefaultBoolean包装类型getter 为isDefault()、setter 为setDefault(Boolean)以兼容 properties 中的default键并且整体标注JsonInclude(JsonInclude.Include.NON_NULL)未设置的字段不会出现在前端 JSON 中。从源码结构看当前版本每个 source 还额外支持独立的agent配置ScalarAgentOptions可用于按文档单独启用/关闭 AI 助手详见 Java 集成文档 的 Agent 一节。安全配置与渲染流程收尾原文档的安全配置一节指出默认情况下 Scalar 端点公开可访问如需保护可用 Spring Security 拦截/scalar/**Configuration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authz - authz .requestMatchers(/scalar/**).authenticated() .anyRequest().permitAll() ) .formLogin(form - form.permitAll()); return http.build(); } }常见配置组合示例原文档给出的“常用配置示例”完整保留如下# 基础配置 scalar.urlhttps://example.com/openapi.json scalar.path/docs scalar.enabledtrue # UI 定制 scalar.themedeepSpace scalar.layoutmodern scalar.darkModefalse scalar.hideSearchfalse scalar.customCssbody { font-family: Arial, sans-serif; } # 内容组织 scalar.operationTitleSourcepath scalar.tagSorteralpha scalar.operationSortermethod scalar.documentDownloadTypeboth # 搜索与导航 scalar.searchHotKeyctrlkYAML 等价写法scalar: url: https://example.com/openapi.json path: /docs enabled: true theme: deepSpace layout: modern darkMode: false hideSearch: false customCss: body { font-family: Arial, sans-serif; } operationTitleSource: path tagSorter: alpha operationSorter: method documentDownloadType: both searchHotKey: ctrlk一次请求内部发生了什么把配置、绑定与渲染串起来看整个链路可以概括为实现见 ScalarHtmlRenderer.javaSpring Boot 把application.properties/yml中scalar.*前缀的属性绑定到一个prototype 作用域的SpringBootScalarProperties实例字符串经JsonCreator转成枚举请求命中${scalar.path}路由后控制器取出该实例先经过可被子类覆盖的configureProperties(properties, request)钩子用于按请求动态改配置ScalarHtmlRenderer.render(properties)加载 WebJar 内的 HTML 模板/META-INF/resources/webjars/scalar/index.html把ScalarProperties经ScalarConfigurationMapper.map(...)映射为前端配置对象再用 Jackson 序列化成 JSON枚举按JsonValue输出小写/小驼峰字符串模板中的三个占位符被替换__JS_BUNDLE_URL__JS bundle 的相对路径按 base path 末段生成以兼容反向代理场景、__PAGE_TITLE__、__CONFIGURATION__上述配置 JSON最终返回完整 HTMLJS bundle 由${scalar.path}/scalar.js或 Actuator 端点按application/javascriptMIME 类型从 WebJar 内读出返回。正因为渲染发生在服务端且模板内嵌完整配置 JSON文档中反复强调的“预填认证信息在浏览器可见、勿用于生产”才成为硬性安全边界。小结与延伸阅读接入路径scalar.enabledscalar.url或sources即可在/scalar获得 API Reference主题、布局、下载按钮、排序等 20 余项配置均以scalar.前缀暴露默认值与 ScalarProperties.java 中的字段初始化值一致类型安全theme/layout/documentDownloadType等已枚举化属性文件写法不变程序化配置需用枚举 setterScalarSource已迁至独立 config 包认证预填apiKey/http/oauth2三组绑定键最终合并为单一securitySchemes字典scheme 名称必须与 OpenAPI 文档严格一致且仅限开发测试环境Actuatorscalar.actuatorEnabledtrue 端点暴露后 UI 出现在/actuator/scalar复用同一渲染链路与自定义钩子当前仓库中该集成的最新形态是模块化三件套core/webmvc/webflux完整属性列表与 WebFlux 用法请继续参考 Java 集成文档并可浏览 integrations/java 目录下的 playground 与测试用例做进一步验证。【免费下载链接】scalarScalar is an open-source API platform: Modern REST API Client Beautiful API References ✨ 1st-Class OpenAPI/Swagger Support项目地址: https://gitcode.com/GitHub_Trending/sc/scalar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表