Java: HTTP Post для создания нового «Продукта» в приложении Ruby on Rails - PullRequest
4 голосов
/ 30 марта 2009

Как использовать Apache HttpClient на Android, как отправить данные в приложение RESTfull Ruby on Rails с помощью HttpPost.

Это мой контроллер:

# 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-адресе или мне нужно установить его где-то еще? (Возможно, httpost.setEntity?) В конце концов, я буду использовать JSON, но сейчас я просто хочу получить его, чтобы я мог вызвать метод «create» в Rails. Rails получает POST, но никогда не выполняет никакого кода в методе «create»

  HttpClient httpclient = new DefaultHttpClient();

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

  HttpResponse response = httpclient.execute(httppost);

Я довольно застрял и был бы рад, если бы кто-то мог указать мне правильное направление.

Ответы [ 3 ]

3 голосов
/ 02 апреля 2009

Я добавил следующее в мой запрос POST, и это сработало как шарм.

httppost.addHeader("Content-Type","application/json");
1 голос
/ 30 марта 2009

Rails не выполняет никакого кода в методе Create, потому что вы делаете запрос к методу "New".

Обычно метод New используется для визуализации HTML-формы, которую пользователь затем отправляет методу create. Для веб-сервиса этот метод не нужен.

Вместо этого используйте URL http://192.168.0.100:3000/products (без / new). По умолчанию rails направит этот запрос методу Create, посмотрев на тип запроса и увидев, что это запрос POST.

Предполагается, что вы правильно настроили Продукты для использования в качестве RESTful-ресурсов на своих маршрутах. В противном случае вам нужно будет использовать http://192.168.0.100:3000/products/create. Вот документация по API для ресурсов и маршрутов RESTful: http://api.rubyonrails.org/classes/ActionController/Resources.html

0 голосов
/ 30 марта 2009

Чтобы отправить данные в POST-запросе, вам нужно позвонить httppost.setRequestBody(). Этот метод принимает массив NameValuePair с вашими данными - обратитесь к документации HTTP Client для правильного синтаксиса.

...