У меня есть несколько моделей на Ruby, которые мне нужно отправить на сервер Java/RestEasy через HTTParty/Put.
configuration_mapping.rb:
def as_json(options = {})
{:configGroup => @group, :coordinates => {@key => @value}}
end
def self.put(endpoint, content, tier = 'nursery')
response = HTTParty.put(base_uri + endpoint, json_payload(content))
end
def self.json_payload(content)
{
:body => content.to_json,
:format => :json,
:headers => {"Content-Type" => "application/json", "content-type" => "application/json", "Accept" => "application/json"}
}
end
JSON получает двойное экранирование:
{ :body=>" { \"configGroup\":\"test\", \"coordinates\":{ \"Integration Test Key\":\"moo\" } } ", :format=>:json, :headers=>{" Content-Type"=>"application/json", "content-type"
=>"application/json", "Accept" =>"application/json" } }
И синтаксический анализатор Jackson JSON боркс:
2011-11-27 15:34:11,179 ОШИБКА [tp-1442358158-0] [ОТЧЕТ] [] [asy.core.SynchronousDispatcher] Не удалось выполнить PUT /v1/groups/test/mappings;tester=Integration Test;tier=qa ;timeStamp=-4712-01-01 org.jboss.resteasy.spi.ReaderException: org.codehaus.jackson.map.JsonMappingException: невозможно десериализовать экземпляр java.lang.String из токена START_OBJECT в [Источник: org.mortbay .jetty.HttpParser$Input@4092fef5; строка: 1, столбец: 22] в
Я попытался позволить httparty преобразовать в json для меня, думая, что httparty экранировал символы, написав свой собственный метод as_json, но это вывод, который не является тем json, который я хотел, здесь неправильные поля, и мой метод as_json не вызывается:
{:body=>Config::Client::ConfigurationMapping:0x00000100c78930 @dimensions={"tester"=>"Integration Test", "tier"=>"qa", "timeStamp"=>"-4712-01-01" }, @key="Ключ тестирования интеграции", @group="test", @value="moo">, :format=>:json, :headers=>{"Content-Type"=>"application/json" , "content-type"=>"application/json", "Accept"=>"application/json"}}
Что приводит к тому, что строка становится двойной экранированной?