2009-03-30 8 views
4

HttpPostを使用してRESTfull Ruby on Railsアプリケーションにデータを送信するには、アンドロイドのApache HttpClientを使用します。Java:Ruby on Railsアプリケーションで新しい "Product"を作成するためのHTTP投稿

は、これは私のコントローラである:

# POST /products 
    def create 

    @product = Product.new(params[:product]) 

    respond_to do |format| 
     if @product.save 
     flash[:notice] = 'Product was successfully created.' 
     format.html { redirect_to(@product) } 
     format.xml { render :xml => @product, :status => :created, :location => @product } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @product.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

そして、これは私のJavaコードです。 URL名にデータを渡す必要がありますか、それとも別の場所に設定する必要がありますか? (おそらくhttptt.setEntity?)最終的に私はJSONを使用しますが、現時点ではRailsで実際に "create"メソッドを呼び出すことができます。 RailsはPOSTを取得しますが、「作成」方法

HttpClient httpclient = new DefaultHttpClient(); 

    HttpPost httppost = new HttpPost("http://192.168.0.100:3000/products/new"); 

    HttpResponse response = httpclient.execute(httppost); 

私はかなりこだわっていますし、誰かが正しい方向に私を指すことができれば幸いですで任意のコードを実行されることはありません。

答えて

3

私のPOSTリクエストに以下を追加しました。それは魅力的でした。

httppost.addHeader("Content-Type","application/json"); 
1

"新規"メソッドへのリクエストがあるため、RailsはCreateメソッドでコードを実行していません。

通常、Newメソッドを使用して、ユーザーがcreateメソッドに送信するHTMLフォームをレンダリングします。 Webサービスの場合、このメソッドは必要ありません。

代わりにURL http://192.168.0.100:3000/products(/ newなし)を使用してください。デフォルトでは、railsは要求のタイプを見てそれがPOSTリクエストであることを見て、このリクエストをCreateメソッドにルーティングします。

これは、ルートにRESTfulリソースとして製品を正しく設定したことを前提としています。それ以外の場合は、http://192.168.0.100:3000/products/createを使用する必要があります。 http://api.rubyonrails.org/classes/ActionController/Resources.html

+0

私はちょうど/製品と一緒に試しましたが、私は同じ結果を得ています。 WEBrickログにはPOSTが表示されていますが、作成方法に記述したステートメントを「put」して表示されません。 – brodie31k

+0

私の答えは編集済みです。/products/createを試してください。それがうまくいくならば、代わりに安らかなリソースのような製品を扱うためにルートを変更するべきです。それが動作しない場合、別の問題があります。 – Gdeglin

0

POSTリクエストでデータを送信するには、httppost.setRequestBody()に電話する必要があります。このメソッドは、データとともにNameValuePairの配列を取ります。正しい構文については、HTTPクライアントのドキュメントを参照してください。

+0

ありがとう、私はそれが何かシンプルだったという気持ちがあったが、私は働いていなかった道を挫折し続けていた。 – brodie31k

関連する問題