Изменение типа тела для JSON с использованием HTTParty
Я пытаюсь использовать Ruby on Rails для связи с API Salesforce. Я могу получить данные достаточно легко, но у меня возникают проблемы с отправкой данных на сервер. Я использую HTTParty в качестве сообщения Quinton Wall здесь:
https://github.com/quintonwall/omniauth-rails3-forcedotcom/wiki/Build-Mobile-Apps-in-the-Cloud-with-Omniauth,-Httparty-and-Force.com
но все, что я, кажется, могу получить с сервера salesforce, является ошибкой, которую я отправляю в качестве html
{ "message" = > "MediaType 'application/x-www-form-urlencoded' не поддерживается этим ресурсом", "errorCode" = > "UNSUPPORTED_MEDIA_TYPE" }
ответственный код выглядит следующим образом:
require 'rubygems'
require 'httparty'
class Accounts
include HTTParty
format :json
...[set headers and root_url etc]
def self.save
Accounts.set_headers
response = (post(Accounts.root_url+"/sobjects/Account/", :body => {:name => "graham"}.to_json))
end
end
У кого-нибудь есть идея, почему тело должно быть опубликовано как html и как изменить это, чтобы он определенно шел как json, чтобы salesforce не отклонял его?
Любая помощь будет оценена по достоинству. приветствия
Ответы
Ответ 1
Вы должны установить заголовок Content-Type в application/json. Я не использовал HTTParty, но похоже, что вы должны сделать что-то вроде
response = (post(Accounts.root_url+"/sobjects/Account/", :body => {:name => "graham"}.to_json) , :options => { :headers => { 'Content-Type' => 'application/json' } } )
Я немного удивлен тем, что опция формата не делает это автоматически.
Ответ 2
Заголовок Content-Type должен быть установлен в "application/json". Это можно сделать, вставив: headers = > {'Content-Type' = > 'application/json'} в качестве параметра для публикации, то есть:
response = post(Accounts.root_url+"/sobjects/Account/",
:body => {:name => "graham"}.to_json,
:headers => {'Content-Type' => 'application/json'} )