swagger - 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
吗?
解决方案
如果您希望您的函数动态决定返回哪种内容类型,则必须按照文档中的说明显式设置标头。
这两种方法之一是返回内容元组、返回码和标题字典,如下所示:
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!'
)
这使您可以更好地控制其他调整。但是,如果简单的元组解决方案适用于您的情况,则没有必要。
推荐阅读
- mysql - 如何使用存储过程或数据透视表选择来操作我的数据库数据?
- redirect - 我的资源是在 https 而不是 http 下加载的
- python - Matplotlib:如何为数据分配正确的 y 轴刻度?
- tensorflow - 使用 Keras API 在 Tensorflow 2.0 中的多个 GPU 上加载模型后如何继续训练?
- asp.net-mvc - .Net Core MVC 中的可重用级联下拉列表
- react-native - PNG图像未在本机android api 16和17中显示
- javascript - 如何在 ChartJS 上向多线图表工具提示添加/标记无法绘制的数据
- apache - 如何在不更改显示 URL 的情况下将子域设置为子文件夹?
- javascript - 从 API 复制下拉过滤器项 - Reactjs
- javascript - 如何在类星体测试中运行单文件测试