Изменение типа тела для 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'} )