0

下面是一个 API *.yml 部分。我想将数据的响应标头设置为Content-type: text/plain,但它application/json现在总是返回。

  /order:
    post:
      tags:
        - order
      summary: order
      operationId: PostOrder
      parameters:
      requestBody:
        description: Order result
        content:
          application/json:
            schema:
              type: object
              properties:
                openReq:
                  type: string
                  example: 'test'

      responses:
        200:
          description: Customer order receive successed
          headers: {}
          content:
            application/json:
              schema:
                type: string
            text/plain:
              schema:
                type: string

此 python 代码返回响应:

def post_order(platform, open_req=None):  # noqa: E501
    """order

    """
    return 'do some magic!'

响应头总是content-type: application/json

      responses:
        200:
          description: Customer order receive successed
          headers: {}
          content:
            application/json:
              schema:
                type: string
            text/plain:
              schema:
                type: string

此代码段的响应标头始终为content-type: text/plain; charset=utf-8

      responses:
        200:
          description: Customer order receive successed
          headers: {}
          content:
#            application/json:
#              schema:
#                type: string
            text/plain:
              schema:
                type: string

我可以在函数中设置响应头内容类型post_order吗?

4

2 回答 2

1

如果您希望您的函数动态决定返回哪种内容类型,则必须按照文档中的说明显式设置标头。

这两种方法之一是返回内容元组、返回码和标题字典,如下所示:

def post_order(platform, open_req=None): 
    """order

    """
    return 'do some magic!', 200, {'content-type': 'text/plain'}

第二种方法是显式创建一个响应对象并返回:

from connexion.lifecycle import ConnexionResponse

def post_order(platform, open_req=None): 
    """order

    """
    return ConnexionResponse(
        status_code=200,
        content_type='text/plain',
        body='do some magic!'
    )

这使您可以更好地控制其他调整。但是,如果简单的元组解决方案适用于您的情况,则没有必要。

于 2021-01-28T00:21:29.457 回答
-1

也许您将 API Swagger Docs 与实际实现混淆了,您的文档是正确的,这意味着 response 200 OK,可以返回为application/jsonor text/plain。返回哪一个完全取决于端点的实现。如果您的端点只返回application/json,那么您将永远不会收到text/plain,那不是 Swagger/OpenApi 的工作。

于 2020-10-07T18:04:27.207 回答