将post方法中的JSON数据从rails控制器发送到Web服务

时间:2013-08-13 12:32:24

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我正在尝试将我在rails中编写的控制器中的一些json数据发送到java webservice。

在表单提交上,我将所有输入字段数据对其进行一些处理,并使用to_json将其转换为json对象。

但我怎样才能将它发送到java webservice

http://localhost:8080/exim/jsonToMapService?jsonData={"key":"value"}

2 个答案:

答案 0 :(得分:4)

您可以使用net/http。 (正如@Pierre所写,你应该在lib文件夹中创建一个类,然后把你的函数放在那里)

url = URI.parse(service_url)
headers = {"host" => URL }
req = Net::HTTP::Post.new(url.path)
req["Content-Type"] = "application/json"
req["Accept"] = "application/json"

req.body = JSON.generate(some_data)

con = Net::HTTP.new(url.host, url.port)

# ssl for https
if full_url.include?("https")
  con.use_ssl = true
  con.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

res = con.start {|http| http.request(req) }

答案 1 :(得分:2)

要做这样的事情,我建议使用RestClientFaraday。但我强烈建议不要在你的控制器中进行HTTP调用。

使用RestClient,它看起来像这样:

RestClient.get('http://localhost:8080/exim/jsonToMapService', { key: :value })

您应该创建一个类以在lib文件夹中提取此逻辑。

正如@eightbitraptor所提到的那样,在执行上述HTTP请求时,您应该通过在Delayed JobResqueSideqik等后台流程中执行来阻止阻止。