当前位置: 首页 > 知识库问答 >
问题:

如何使用Mule 4.4运行时在OpenAPI 3.0中验证JSON有效负载

常乐
2023-03-14

我需要使用openapi:3.0.0开发Mule API(4.4运行时)。endpoint是具有以下请求负载的POST:

{
  "Employee": {
     "Address": {
        "City": "a",
        "Country": "aaa"
      }
  }
}

这是OpenAPI 3.0规范的相关部分:

    openapi: "3.0.0"
paths:
  /search:
    post:
      tags:
      - SearchUser
      summary: Search for Users
      operationId: getUser
      requestBody:
        description: User Request Object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestComp'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ResponseComp'
        '400':
          description: Bad request
          content: {}
        '404':
          description: User not found
          content: {}
        '405':
          description: Validation exception
          content: {}
      
components:
  schemas:
    RequestComp:
      type: object
      properties:
        Employee:
          $ref: '#/components/schemas/EmployeeComp'
    EmployeeComp:
      type: object
      properties:
        Address:
          $ref: '#/components/schemas/AddressComp'
    AddressComp:
      type: object
      properties:
        City:
          type: string
          required: true
          nullable: false
          minLength: 1
        Country:
          type: string
          required: true
          nullable: false
          minLength: 1
    ResponseComp:
      type: object
      properties:
        City:
          type: string
        Country:
          type: string

所以我可以验证单个元素,如“城市”和“国家”不为空,但我如何防止以下请求?(目前未标记为无效:)

    {
        "Address": {
           "City": "a",
           "Country": "aaa"
        }
    }

共有1个答案

鲍鸿波
2023-03-14

您可以将Employee包装定义为必需属性,还可以通过添加附加属性false来禁止未知属性。请注意,required不是属性级属性,而是对象级属性-它是所需属性的列表。

components:
  schemas:
    RequestComp:
      type: object
      required: [Employee]         # <-----
      properties:
        Employee:
          $ref: '#/components/schemas/EmployeeComp'
      additionalProperties: false  # <-----

    EmployeeComp:
      type: object
      properties:
        Address:
          $ref: '#/components/schemas/AddressComp'
      additionalProperties: false  # <-----

    AddressComp:
      type: object
      required: [City, Country]    # <-----
      properties:
        City:
          type: string
          # required: true    # <-- remove this
          nullable: false
          minLength: 1
        Country:
          type: string
          # required: true    # <-- remove this
          nullable: false
          minLength: 1
      additionalProperties: false  # <-----

 类似资料:
  • 我正在创建一个自定义Jackson反序列化器类来将JSON负载映射到一个对象。在我的方法中,我对JSON负载进行了一些检查,以查看是否缺少任何字段或与POJO不一致。 我尝试在方法中抛出异常,方法如下所示: 但是,我不允许在方法中抛出我自己的异常,因为该方法实现了一个接口,我只能抛出和: 在这种情况下,当执行反序列化时,如何验证JSON有效负载?

  • 问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做:

  • 问题内容: 有没有办法在不使用PHP的情况下检查变量是否为有效的JSON字符串?我没有PHP 5.3.3。 问题答案:

  • 我有一个巨大的JSON文件作为RESTAPI调用的有效负载发布,用于测试目的。我试过这样的方法: 并将错误获取为: 我可以通过读取文件和传递身体作为字符串运行,但我看到我可以直接传递文件对象,这不起作用。 经过充分的研究,它似乎不起作用。我已经放心地提出了这个问题。https://github.com/jayway/rest-assured/issues/674

  • 我正在尝试验证Json Objects。我使用https://code.google.com/p/rest-assured/wiki/Downloads?tm=2, greeter-schema.json:http://cs606926.vk.me/v606926718/15603/0Kauo1bTDi8.jpg 即使JsonString不等于这个“{\”isSuccess\“:false}”,我