0

Я пытался использовать Google видение API v1 сплавом AppceleratorПочему я получаю недопустимую полезную нагрузку JSON при вызове API облачного зрения google из appcelerator?

создать запрос HTTPClient и вызвать API https://vision.googleapis.com/v1/images:annotate?key=MY_APP_KEY

Но у меня есть получить текст ответа от Google:

{ 
error = { 
    code = 400; 
    details = (
        { 
        "@type" = "type.googleapis.com/google.rpc.BadRequest"; 
         fieldViolations = ({ 
             description = "Invalid JSON payload received. Unknown name \"request\": Cannot bind query parameter. Field 'request' could not be found in request message."; 
             }); 
        } 
       ); 
    message = "Invalid JSON payload received. Unknown name \"request\": Cannot bind query parameter. Field 'request' could not be found in request message."; 
    status = "INVALID_ARGUMENT"; 
    }; 

}

И есть мой код использования HTTP запрос от Alloy

var requests = 
{ 
    "requests":[ 
    { 
     "image":{ 
     "content": "image_have_encodebase64", 
     }, 
     "features":[ 
     { 
      "type":"TEXT_DETECTION", 
      "maxResults":1 
     } 
     ] 
    } 
    ] 
}; 
var xhr = Titanium.Network.createHTTPClient(); 
xhr.open("POST", 'https://vision.googleapis.com/v1/images:annotate?key=MY_APP_KEY'); 
xhr.send(JSON.stringify(requests)); 

Спасибо за вашу помощь

+0

Имея взгляд на API, я заметил, что имя массива должно быть запросом (множественным числом), а не запросом. Дайте мне знать, если это поможет –

+0

Спасибо за вашу помощь, но он получит ту же ошибку, если я меняю запрос на запросы –

+0

Вы пытались выполнить JSON.stringify()? Например: '' 'xhr.send (JSON.stringify (запросы));' '' –

ответ

1

, установив Content-Length и Content-Type заголовки он должен работать:

xhr.setRequestHeader("Content-Length", size); 
xhr.setRequestHeader("Content-Type", "application/json"); 

Также следует отметить, что Google рекомендует изменение размера изображения до 1024 х 768 - вы можете изменить размер вашего изображение с:

img = img.imageAsResized(1024,768); 

После внесения этих изменений в мой код у меня было все, что работает.