Как вернуть JSON в методе REST get с использованием полного API Odoo - PullRequest
0 голосов
/ 30 апреля 2018

Я сделал API с помощью метода 'GET' в odoo10, и я хотел бы, чтобы возвращаемое значение было в json. Когда я запускаю мой код ниже с почтальоном

@http.route("/check_method_get", auth='none', type='http',method=['GET'])
def check_method_get(self,**values):
    output = {
        'results':{
            'code':200,
            'message':'OK'
        }
    }

    return json.dumps(output)

результат в заголовках:

Content-Length →43
Content-Type →text/html; charset=utf-8
Date →Mon, 30 Apr 2018 15:07:30 GMT
Server →Werkzeug/0.11.11 Python/2.7.12
Set-Cookie →session_id=505500f3f5b83ada1608d84e38d2f1776006b443;  Expires=Sun, 29-Jul-2018 15:07:30 GMT; Max-Age=7776000; Path=/ 

и результат в Body

{"results": {"message": "OK", "code": 200}}

Проблема в том, что Content-Type → text / html . Я хочу Content-Type → application / json . Затем я изменяю свой код ниже

@http.route("/check_method_get", auth='none', type='http',method=['GET'])
def check_method_get(self,**values):
    return Response(headers={
            'Content-Type': 'application/json',
            'results':{
                'code':200,
                'message':'OK'
            }
        })

Результат в заголовке:

Content-Length →0
Content-Type →application/json
Date →Mon, 30 Apr 2018 15:18:41 GMT
Server →Werkzeug/0.11.11 Python/2.7.12
Set-Cookie →session_id=505500f3f5b83ada1608d84e38d2f1776006b443;   Expires=Sun, 29-Jul-2018 15:18:41 GMT; Max-Age=7776000; Path=/
results →{'message': 'OK', 'code': 200}

Но в Теле нет результата. Я хочу {"results": {"message": "OK", "code": 200}} в Body Result как json.

Есть ли какая-нибудь подсказка, чтобы исправить проблему, если я искал это возвращаемое значение в JSON только в методе POST.

1 Ответ

0 голосов
/ 30 апреля 2018

Я думаю, что проблема связана с обработкой, которую Odoo запускает в ответе. Поскольку вы указываете type='http', Odoo добавляет соответствующие заголовки для простого http-запроса, а не 'application / json'.

Попробуйте это

@http.route("/check_method_get", auth='none', type='json',method=['GET'])
def check_method_get(self,**values):
    output = {
        'results':{
            'code':200,
            'message':'OK'
        }
    }
return json.dumps(output)

Другая ваша попытка поместила весь контент в заголовок. Возможно, вы сможете заставить его работать, изменив запрос следующим образом.

@http.route("/check_method_get", auth='none', type='http',method=['GET'])
def check_method_get(self,**values):
    headers = {'Content-Type': 'application/json'}
    body = { 'results': { 'code':200, 'message':'OK' } }

    return Response(json.dumps(body), headers=headers)
...