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

如何在OpenAPI 3.0中定义带属性校验的必填requestBody?

问题

我在OpenAPI 3.0中定义了如下接口及requestBody,已将ImportDataDTO的required设为true:

/data/{idParam}:
    put:
      tags:
        - Data
      parameters:
        - $ref: "./commonDTO.yaml#/components/parameters/dataIdParam"
      summary: My request
      description: |-
        Allows operator to import data.

      operationId: importData
      requestBody:
        $ref: "#/components/requestBodies/ImportDataDTO"


requestBodies:
  ImportDataDTO:
    required: true
    content:
      application/json:
        schema:
          properties:
            name:
              type: string
            dataId:
              $ref: "./commonDTO.yaml#/components/schemas/dataID"
            requestHeader:
              $ref: "./commonDTO.yaml#/components/schemas/RequestHeaderDTO"
            dataDTO:
              $ref: "#/components/schemas/MyDataObj" 

但使用cpp-pistache-server生成器生成的validate方法未对请求属性(如name、dataId、dataDTO等)进行必填校验,生成的代码如下:

bool ImportData_request::validate(std::stringstream& msg, const std::string& pathPrefix) const
{
    bool success = true;
    const std::string _pathPrefix = pathPrefix.empty() ? "ImportData_request" : pathPrefix;

                    
    return success;
}

请问如何配置才能让生成的代码自动校验这些请求属性是否已设置?

解决方法

你当前设置的required: true仅表示整个requestBody是必填项(即请求不能缺少body),但不会触发body内部属性的必填校验。要让cpp-pistache-server生成器自动生成属性校验代码,需要按以下步骤配置:

  1. 在schema层级添加required数组,明确指定必填属性
    修改ImportDataDTO的schema定义,新增required字段列出所有需要校验的属性:

    requestBodies:
      ImportDataDTO:
        required: true
        content:
          application/json:
            schema:
              type: object  # 显式声明为object类型,部分生成器依赖这个标记生成校验逻辑
              properties:
                name:
                  type: string
                dataId:
                  $ref: "./commonDTO.yaml#/components/schemas/dataID"
                requestHeader:
                  $ref: "./commonDTO.yaml#/components/schemas/RequestHeaderDTO"
                dataDTO:
                  $ref: "#/components/schemas/MyDataObj" 
              required:  # 新增:列出所有必填的属性名
                - name
                - dataId
                - dataDTO
    
  2. 递归配置嵌套schema的必填规则
    如果dataID、RequestHeaderDTO、MyDataObj这些引用的schema内部也有需要校验的必填属性,必须在各自的schema定义中同样添加required数组,生成器才会递归生成嵌套属性的校验代码。

  3. 确认生成器启用校验功能
    部分OpenAPI生成器需要通过参数显式开启校验代码生成,你可以在生成命令中添加enableValidation=true参数:

    openapi-generator generate -g cpp-pistache-server -i your-spec.yaml -o output-dir --additional-properties=enableValidation=true
    

完成以上配置后,重新生成代码,ImportData_request::validate方法就会自动添加对name、dataId、dataDTO等属性的非空校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:40