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()
。此方法采用 NameValuePair
s 数组和您的数据 - 请参阅 HTTP 客户端文档以了解正确的语法。
【讨论】:
谢谢,我觉得这很简单,但我一直在走行不通的道路并感到沮丧!以上是关于Java:在 Ruby on Rails 应用程序中创建新“产品”的 HTTP Post的主要内容,如果未能解决你的问题,请参考以下文章
思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)
Windows 中的 Jenkins 和 Ruby On Rails 4