首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改JSON-RPC响应

更改JSON-RPC响应
EN

Stack Overflow用户
提问于 2018-05-17 14:50:00
回答 2查看 540关注 0票数 0

我正在使用ODOO 11.0如何在没有JSON-RPC附加参数的情况下返回简单的JSON对象

下面是我的odoo控制器代码:

代码语言:javascript
复制
@http.route('/userappoint/webhook_test/',type='json', auth='public',method=['POST'], csrf=False,website=True)
def webhook_test(self,**kw):

    response = {
        'speech'        : 'hello my name is shubham',
        'displayText'   : 'hello testing',
        'source'        : 'webhook'
    }
    return response

我得到了这样的结果:

代码语言:javascript
复制
{
"result": {
             "displayText": "hello testing",
             "source": "webhook",
             "speech": "hello my name is shubham"
          },
"id": "6eaced3e-6b0d-4518-9710-de91eaf16dd9",
"jsonrpc": "2.0"
}

但我需要这个:

代码语言:javascript
复制
{
"speech": "hello my name is shubham",
"displayText": "hello testing",
"source": "webhook" 
}

能帮我指出正确的方向吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-09-14 08:50:56

适用于Odoo11。只需编辑下面在odoo /dodoo11/odoo/http.py中定义的函数_json_response的下面部分,就像下面这样,重新启动odoo服务。

代码语言:javascript
复制
def _json_response(self, result=None, error=None):

    response = {
        'jsonrpc': '2.0',
        'id': self.jsonrequest.get('id')
        }
    if error is not None:
        response['error'] = error
    if result is not None:
        response['result'] = result

致新人:

代码语言:javascript
复制
def _json_response(self, result=None, error=None):

    response = {}
    if error is not None:
        response = error
    if result is not None:
        response = result

然后,重新启动odoo服务

票数 1
EN

Stack Overflow用户

发布于 2020-11-18 02:36:18

在初始化控制器类之前,将以下代码放入任何控制器中

代码语言:javascript
复制
from odoo import http
from odoo.http import request, Response, JsonRequest
from odoo.tools import date_utils

class JsonRequestNew(JsonRequest):

    def _json_response(self, result=None, error=None):

        # response = {
        #    'jsonrpc': '2.0',
        #    'id': self.jsonrequest.get('id')
        #    }
        # if error is not None:
        #    response['error'] = error
        # if result is not None:
        #    response['result'] = result

        responseData = super(JsonRequestNew, self)._json_response(result=result,error=error)

        response = {}
        if error is not None:
            response = error
        if result is not None:
            response = result

        mime = 'application/json'
        body = json.dumps(response, default=date_utils.json_default)

        return Response(
            body, status=error and error.pop('http_status', 200) or 200,
            headers=[('Content-Type', mime), ('Content-Length', len(body))]
        )

class RootNew(http.Root):

    def get_request(self, httprequest):
        
        # deduce type of request

        jsonResponse = super(RootNew, self).get_request(httprequest=httprequest)

        if httprequest.mimetype in ("application/json", "application/json-rpc"):
            return JsonRequestNew(httprequest)
        else:
            return jsonResponse

http.root = RootNew()

class MyController(http.Controller):
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50385070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档