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

Odoo15 API控制器如何返回简短的500错误响应文本

在Odoo 15 API控制器中返回自定义500错误信息

针对你的需求,有两种可靠的实现方式,解决原生异常冗余和直接返回Response丢失信息的问题:

方法一:构造符合Odoo JSON RPC规范的错误响应

Odoo的API默认遵循JSON RPC格式,直接返回纯字符串会被框架判定为无效响应,导致自定义信息丢失。你需要构造标准的错误结构,确保客户端能正确解析:

import json
from odoo import http
from odoo.http import request

class CustomAPIController(http.Controller):
    @http.route('/custom/api/action', type='json', auth='public')
    def custom_api_action(self):
        # 模拟业务报错场景
        try:
            # 你的业务逻辑代码
            raise ValueError("数据验证失败:缺少必填字段")
        except Exception as e:
            # 构造标准JSON错误响应
            error_payload = {
                'jsonrpc': '2.0',
                'id': request.jsonrequest.get('id'),
                'error': {
                    'code': 500,
                    'message': 'Internal Server Error',
                    'data': str(e)
                }
            }
            return request.Response(
                json.dumps(error_payload),
                status=500,
                content_type='application/json'
            )

这种方式返回的响应和Odoo原生API格式完全一致,自定义错误信息会放在error.data字段中,不会附带任何堆栈跟踪或冗余文件信息。

方法二:使用Odoo内置的HttpException

Odoo提供了HttpException类,专门用于返回自定义HTTP状态码和错误信息,且默认不会输出堆栈内容(生产环境下):

from odoo import http
from odoo.exceptions import HttpException
import json

class CustomAPIController(http.Controller):
    @http.route('/custom/api/action', type='json', auth='public')
    def custom_api_action(self):
        if some_error_condition:
            error_data = {
                'message': '自定义服务器错误信息'
            }
            raise HttpException(request.Response(
                json.dumps(error_data),
                status=500,
                content_type='application/json'
            ))
        # 正常业务逻辑返回
        return {'result': '操作成功'}

为什么之前的方法失效?

  • raise Exception():Odoo的默认异常处理会自动附加堆栈跟踪、文件路径等调试信息,这是开发模式下的默认行为,生产环境关闭debug后仍会返回部分冗余内容。
  • 直接返回request.Response:若路由类型为type='json',Odoo期望接收JSON格式的返回值,纯字符串会被框架过滤或解析失败,导致自定义信息无法被客户端读取。

内容的提问来源于stack exchange,提问作者Wald Sin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:26:15