You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RouterBuilder配置Vertx OpenApi端点时如何禁用JSON Schema校验

Vert.x RouterBuilder 禁用OpenAPI自动JSON校验方案

问题原因

你之前的配置不生效是因为RouterBuilder在调用createRouter()生成Router实例时,已经默认给所有匹配OpenAPI规范的operation路由链最前端挂载了默认的ValidationHandler,你之后给Router全局追加的dummy校验handler执行顺序在默认校验之后,请求还没走到你的自定义逻辑就已经被默认校验拦截返回错误了。

解决方案

有两种常用实现方式,按需选择即可:

方式1:仅禁用指定POST接口的校验

针对单个operation调用skipValidation()方法,即可跳过该接口的自动校验挂载,其余接口仍保持默认校验逻辑:

RouterBuilder.create(vertx, pathToMyOpenApi)
      .onSuccess(routerBuilder -> {
        routerBuilder
            .operation("operation")
            .skipValidation() // 关键:跳过当前operation的自动校验挂载
            .handler(BodyHandler.create()) // 禁用校验后需自行添加BodyHandler读取请求体
            .handler(this::operationHandler);

        var router = routerBuilder.createRouter();
        apiRouter.mountSubRouter("/path", router);
});

方式2:全局禁用所有接口的自动校验

如果所有接口都不需要Vert.x的校验逻辑,可以在创建RouterBuilder时通过配置项全局关闭自动校验挂载:

// 配置全局关闭自动挂载校验Handler
OpenAPIRouterOptions routerOptions = new OpenAPIRouterOptions()
        .setMountValidationHandler(false);

RouterBuilder.create(vertx, pathToMyOpenApi, routerOptions)
      .onSuccess(routerBuilder -> {
        routerBuilder
            .operation("operation")
            .handler(BodyHandler.create())
            .handler(this::operationHandler);

        var router = routerBuilder.createRouter();
        apiRouter.mountSubRouter("/path", router);
});

补充说明

禁用自动校验后,原来ValidationHandler自动解析请求参数、请求体到RoutingContext的能力也会失效,你需要自行通过BodyHandler读取raw JSON payload,再执行Avro反序列化和自定义校验即可。

内容的提问来源于stack exchange,提问作者user3895759

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:09:04