Odoo 13 JSON API返回无效JSON数据及content-type异常问题求助
问题根因
Odoo中type='json'的路由是专门适配JSON-RPC 2.0协议的,并非通用的REST风格JSON接口:
- 你用普通GET请求直接访问时,请求体/请求参数不符合JSON-RPC的格式要求,Odoo会直接抛出400错误,返回的错误页默认是text/html格式,所以你看到content-type不符合预期。
解决方法
方案1:开发通用REST JSON接口(推荐)
将路由的type改为http,自行构造JSON格式的响应返回,修改后的代码如下:
from odoo import http from odoo.http import Response import json class OpenAcademy(http.Controller): @http.route('/opentest/', type='http', csrf=False, auth="none", methods=['GET']) def update_order_webhook(self): res = { 'success': False, 'error': 'no_tx_found', } # 构造JSON响应,指定Content-Type return Response( json.dumps(res), content_type='application/json;charset=utf-8', status=200 )
修改后直接用普通GET请求访问即可正常返回JSON格式数据,content-type也会正确为application/json。
方案2:保留JSON-RPC协议
如果你的调用方适配JSON-RPC 2.0协议,可以保留type='json'配置,请求时按照协议格式发送请求即可:
POST请求的body需携带如下结构的JSON数据:
{ "jsonrpc": "2.0", "method": "call", "params": {}, "id": 1 }
请求发送后即可正常收到JSON格式的响应,content-type也会自动设置为application/json。
内容的提问来源于stack exchange,提问作者Nitin Tripathi
相关产品推荐
相关产品推荐

