Railsで記述されたコントローラーからJava Webサービスにjsonデータを送信しようとしています。
フォームの送信時に、すべての入力フィールドのデータを取得し、to_json を使用して json オブジェクトに変換します。
しかし、どうすればJava Webサービスに送信できますか
http://localhost:8080/exim/jsonToMapService?jsonData={"key":"value"}
Railsで記述されたコントローラーからJava Webサービスにjsonデータを送信しようとしています。
フォームの送信時に、すべての入力フィールドのデータを取得し、to_json を使用して json オブジェクトに変換します。
しかし、どうすればJava Webサービスに送信できますか
http://localhost:8080/exim/jsonToMapService?jsonData={"key":"value"}
使用できます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) }
このようなことを行うには、RestClientまたはFaradayを使用することをお勧めします。ただし、コントローラーで HTTP 呼び出しを行わないことを強くお勧めします。
RestClient を使用すると、次のようになります。
RestClient.get('http://localhost:8080/exim/jsonToMapService', { key: :value })
lib
たとえば、このロジックをフォルダーに抽出するクラスを作成する必要があります。
@eightbitraptor が言及したように、上記のような HTTP リクエストを実行する場合は、Delayed Job、Resque、またはSideqikなどのバックグラウンド プロセスで実行することにより、ブロックを回避する必要があります。