2011-05-27 16 views
12

Salesforce API'sı ile iletişim kurmak için Ruby on Rails kullanmaya çalışıyorum. Verileri yeterince rahatça alabilirim ancak veriyi sunucuya gönderirken sorun yaşıyorum. Ben kullanıyorum HTTParty burada Quinton Wall'un gönderim başına gibidir:Gövde Türünün HTTParty Kullanılarak Değiştirilmesi

https://github.com/quintonwall/omniauth-rails3-forcedotcom/wiki/Build-Mobile-Apps-in-the-Cloud-with-Omniauth,-Httparty-and-Force.com

ama satış gücü sunucusundan elde edebilmek görünmektedir tüm html olarak vücudu göndererek am hatadır

{" 'application/x-www-form-urlencoded' Bu kaynak tarafından desteklenmiyor mesajı "=>" MediaType", "errorCode"=> "UNSUPPORTED_MEDIA_TYPE"}

sorumlu kodu gibi görünür:

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 

Vücudun html olarak neden yayınlanacağı ve bunun nasıl değiştirileceği konusunda bir fikriniz var, bu yüzden satış ekibi bunu reddetmiyor.

Herhangi bir yardım için teşekkür ederiz. cheers

cevap

11

Content-Type üstbilgisini application/json olarak ayarlamanız gerekir. Ben HTTParty kullanmadıysanız, ancak ben biçimi seçeneği otomatik olarak yapmak olmadığını biraz surpised değilim

response = (post(Accounts.root_url+"/sobjects/Account/", :body => {:name => "graham"}.to_json) , :options => { :headers => { 'Content-Type' => 'application/json' } }) 

gibi bir şey yapmak zorunda gibi görünüyor.

+1

şerefe. Ben sadece istek üzerine satır üstbilgileri 'Content-Type' => "application/json" eklerseniz, o zaman bu da hile yapmak gibi görünüyor. Vücut json olarak ayarlanmış olsa bile sadece html varsayılan. Yardımınız için teşekkürler – GrahamJRoy

+0

to_json çağrısının, vücudun biçimi hakkında kafa karıştırması mümkün mü? Gördüğüm diğer örnekler bunu yapmadı. – superfell

+0

ilginç. Ayrı bırakılırsa json ayrıştırma hatası alıyorum: {"message" => "Tanınmayan jeton 'naegaa':" null "," true "veya" false "[line: 1, column: 23] 'da bekliyordum, "errorCode" => "JSON_PARSER_ERROR"} – GrahamJRoy

18

İçerik Türü üstbilgisinin "application/json" olarak ayarlanması gerekir. Bu ekleyerek yapılabilir: başlıklar => { 'Content-Type' => 'application/json'} mesaja bir parametre olarak, yani:

response = post(Accounts.root_url+"/sobjects/Account/", 
    :body => {:name => "graham"}.to_json, 
    :headers => {'Content-Type' => 'application/json'}) 
+1

Ayrıca "application/vnd.api + json" mime türünü kullanmayı da düşünebilirsiniz, [kayıtlı IANA ile] (http://www.iana.org/assignments/media-types/application/vnd.api+json) ve [jsonapi] 'nin bir parçası olarak belgelendi (http://jsonapi.org/) – jesse