You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:36:00