Java: HTTP Post создать новый «продукт» в Ruby, Rails по применению

голоса
4

Использование Apache HttpClient на андроид, как я могу отправить данные в RESTfull Ruby, 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, но сейчас я просто хочу, чтобы получить его, так что я на самом деле может вызвать метод «создать» в Rails. Rails является получение POST, но никогда не выполняет какой-либо код в методе «создания»

  HttpClient httpclient = new DefaultHttpClient();

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

  HttpResponse response = httpclient.execute(httppost);

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

Задан 30/03/2009 в 05:00
источник пользователем
На других языках...                            


3 ответов

голоса
3

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

httppost.addHeader("Content-Type","application/json");
Ответил 02/04/2009 d 03:18
источник пользователем

голоса
1

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

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

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

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

Ответил 30/03/2009 d 05:04
источник пользователем

голоса
0

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

Ответил 30/03/2009 d 07:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more