SpringdocCompatPlugin
SpringdocCompatPlugin 用于修复 SpringDoc 生成的 OpenAPI 文档中不符合 OpenAPI 规范的兼容性问题。
SpringDoc 在某些版本中会输出以下不规范的结构,导致解析和校验失败。SpringdocCompatPlugin 在 beforeValidate 阶段自动修正这些问题:
- 展平嵌套
extensions:SpringDoc 会将扩展字段(如x-*)嵌套在一个额外的extensions对象中,而非直接放置在父对象上。插件会递归地将其展平回父对象。 - 补充缺失的 parameter
schema:SpringDoc 生成的parameters有时缺少schema字段(且未定义content),不符合 OpenAPI 规范要求。插件会自动为这些 parameter 补充schema: {}。
配置方法
.keqrc.ts
import { defineKeqConfig } from "@keq-request/cli"
import { SpringdocCompatPlugin } from '@keq-request/cli/plugins'
export default defineKeqConfig({
outdir: "./src/apis",
modules: {
userService: "./user-service-swagger.json",
},
plugins: [new SpringdocCompatPlugin()],
})提示
如果你在校验阶段遇到以下错误,说明你的 OpenAPI 文档由 SpringDoc 生成且存在兼容性问题,添加此插件即可解决:
"Property extensions is not expected to be here"- parameter 缺少
schema导致的校验错误
选项
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
ensureJsonBody | boolean | false | 确保 application/json 请求始终携带 body |
ensureJsonBody
Spring Boot 默认使用 Jackson 作为 JSON 反序列化器。当请求设置了 Content-Type: application/json 但未携带 body 时,Jackson 会直接报错。启用 ensureJsonBody 后,生成的代码会自动发送空对象 {},确保即使未传递任何 body 属性也不会触发后端错误。
.keqrc.ts
import { defineKeqConfig } from "@keq-request/cli"
import { SpringdocCompatPlugin } from '@keq-request/cli/plugins'
export default defineKeqConfig({
outdir: "./src/apis",
modules: {
userService: "./user-service-swagger.json",
},
plugins: [new SpringdocCompatPlugin({ ensureJsonBody: true })], // [!code highlight]
})警告
此选项默认关闭,因为并非所有 Spring Boot 项目都使用 Jackson 或使用 Jackson 的默认配置。仅在确认后端因空 body 报错时启用。