Spring 从 swaggerhub 生成的引导代码无法在其他属性上抛出 400

Spring boot code generated from swaggerhub is not able to throw 400 on additional properties

我已经登录到 swaggerhub 并生成了一个样本清单 API,这是他们模板的一部分。 在 codegen options 中选择 spring 作为服务器。勾选 useBeanValidation 复选框。生成代码,测试它。除了一件事之外,验证工作正常。我不想在 POST 有效负载上允许任何额外的 属性。

注意:openAPI 规范没有指定 'additionalProperties' 标志。根据我的理解,它默认为 'false' 。我也试图明确指定相同的内容。但没有运气。当我添加 additionalProperty 时没有抛出异常。

OpenAPI 规范

openapi: 3.0.0
servers:
  # Added by API Auto Mocking Plugin
  - description: SwaggerHub API Auto Mocking
    url: https://virtserver.swaggerhub.com/xxxx/apionopenApi3/1.0.0
info:
  description: This is a simple API
  version: "1.0.0"
  title: Simple Inventory API
  contact:
    email: you@your-company.com
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
tags:
  - name: admins
    description: Secured Admin-only calls
  - name: developers
    description: Operations available to regular developers
paths:
  /inventory:
    get:
      tags:
        - developers
      summary: searches inventory
      operationId: searchInventory
      description: |
        By passing in the appropriate options, you can search for
        available inventory in the system
      parameters:
        - in: query
          name: searchString
          description: pass an optional search string for looking up inventory
          required: false
          schema:
            type: string
        - in: query
          name: skip
          description: number of records to skip for pagination
          schema:
            type: integer
            format: int32
            minimum: 0
        - in: query
          name: limit
          description: maximum number of records to return
          schema:
            type: integer
            format: int32
            minimum: 0
            maximum: 50
      responses:
        '200':
          description: search results matching criteria
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InventoryItem'
        '400':
          description: bad input parameter
    post:
      tags:
        - admins
      summary: adds an inventory item
      operationId: addInventory
      description: Adds an item to the system
      responses:
        '201':
          description: item created
        '400':
          description: 'invalid input, object invalid'
        '409':
          description: an existing item already exists
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InventoryItem'
        description: Inventory item to add
components:
  schemas:
    InventoryItem:
      type: object
      additionalProperties: False
      required:
        - id
        - name
        - manufacturer
        - releaseDate
      properties:
        id:
          type: string
          format: uuid
          example: d290f1ee-6c54-4b01-90e6-d701748f0851
        name:
          type: string
          example: Widget Adapter
        releaseDate:
          type: string
          format: date-time
          example: '2016-08-29T09:12:33.001Z'
        manufacturer:
          $ref: '#/components/schemas/Manufacturer'
    Manufacturer:
      required:
        - name
      properties:
        name:
          type: string
          example: ACME Corporation
        homePage:
          type: string
          format: url
          example: 'https://www.acme-corp.com'
        phone:
          type: string
          example: 408-867-5309
      type: object
      additionalProperties: False
        

在 post API.

上获得了 400 个有效载荷
{
    "id": "7f125802-7840-4ff0-8ddb-7c78c0948987",
    "name11111": "Widget Adapter",
    "releaseDate": "2016-08-29T09:12:33.001Z",
      "manufacturer": {
    "name": "ACME Corporation",
    "homePage": "",
    "phone": "408-867-5309"
        }
}

预期 400 但未在 post

上获得此负载
{
    "id": "7f125802-7840-4ff0-8ddb-7c78c0948983",
    "name": "Widget Adapter",
    "releaseDate": "2016-08-29T09:12:33.001Z",
      "manufacturer": {
    "name": "ACME Corporation",
    "homePage": "",
    "phone": "408-867-5309"
        },
    "newkey" : "newValue"

}

任何人都可以帮忙吗..我想完全禁止其他属性并在这些请求上抛出 400..

additionalProperties 的默认值实际上是 True,而不是 False。

添加 false 不会导致 swagger-codegen for Spring 实际上不允许其他字段,这已经够烦人了。在错误的方向 运行 几个小时后,我找到了解决方案:

在application.properties spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=真

我遇到了同样的麻烦并尝试利用过滤器,但在将@RequestBody 的自动反序列化中使用的模型与 servlet 请求绑定以及在模型更改之间保持行为一致时遇到了问题。得出这个结论需要编写大量不必要的样板文件并浪费大量时间。

我还试图找到一种方法,在模型或任何模型注释的自动使用中注入一些行为,这将改变模型如何自动忽略其他字段而不报告错误的请求。穷尽注释之路后,我找到了解决方案。