Java:在 Ruby on Rails 应用程序中创建新“产品”的 HTTP Post

Posted

技术标签:

【中文标题】Java:在 Ruby on Rails 应用程序中创建新“产品”的 HTTP Post【英文标题】:Java: HTTP Post to create new "Product" in a Ruby on Rails application 【发布时间】:2010-10-16 07:24:20 【问题描述】:

android 上使用 Apache HttpClient,如何使用 HttpPost 将数据发送到 RESTfull Ruby on Rails 应用程序。

这是我的控制器:

# 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 名称中传递数据,还是必须将其设置在其他地方? (也许是httppost.setEntity?)最终我将使用JSON,但现在我只想得到它,这样我就可以在Rails 中调用“create”方法。 Rails 正在获取 POST,但从未在“create”方法中执行任何代码

  HttpClient httpclient = new DefaultHttpClient();

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

  HttpResponse response = httpclient.execute(httppost);

我很困惑,如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

【参考方案1】:

我在我的 POST 请求中添加了以下内容,它就像一个魅力。

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

【讨论】:

【参考方案2】:

Rails 没有执行 Create 方法中的任何代码,因为您正在向“New”方法发出请求。

通常,New 方法用于呈现用户随后提交给 create 方法的 HTML 表单。对于 Web 服务,不需要此方法。

请改用 URL http://192.168.0.100:3000/products(不带 /new)。默认情况下,rails 会通过查看请求类型并确定它是 POST 请求来将此请求路由到 Create 方法。

这假设您已将 Products 正确设置为路由中的 RESTful 资源。否则,您将需要使用http://192.168.0.100:3000/products/create。这是 RESTful 资源和路由的 API 文档:http://api.rubyonrails.org/classes/ActionController/Resources.html

【讨论】:

我只尝试了 /products 并且得到了相同的结果。 WEBrick 日志显示它得到了一个 POST,但它没有打印出我在 create 方法中放入的“put”语句 我编辑了我的答案以获得更多信息。试试 /products/create。如果可行,那么您很可能应该更改路线,将产品视为一种宁静的资源。如果它不起作用,那么还有另一个问题。【参考方案3】:

要在 POST 请求中提交数据,您需要调用 httppost.setRequestBody()。此方法采用 NameValuePairs 数组和您的数据 - 请参阅 HTTP 客户端文档以了解正确的语法。

【讨论】:

谢谢,我觉得这很简单,但我一直在走行不通的道路并感到沮丧!

以上是关于Java:在 Ruby on Rails 应用程序中创建新“产品”的 HTTP Post的主要内容,如果未能解决你的问题,请参考以下文章

思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)

Windows 中的 Jenkins 和 Ruby On Rails 4

分析 ruby​​ / ruby​​ on rails 应用程序

Ruby on rails在主机上传[关闭]

Ruby on Rails Cron 作业示例

如何注销 Facebook - 在 Rails 应用程序中使用代码(Ruby on Rails Omniauth)