首页 > 解决方案 > Connexion 如何设置响应内容类型?

问题描述

下面是一个 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吗?

标签: swaggeropenapiconnexion

解决方案


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

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

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!'
    )

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


推荐阅读