Rails中api-namespace下的默认客户端Content-Type?

时间:2015-06-26 19:10:05

标签: ruby-on-rails

如何在给定命名空间下为我的Rails应用程序设置所有传入请求的默认Content-Type?

在我的情况下,我有一个/api命名空间,总是期望JSON,但我不想强迫客户端始终设置它(他们欢迎这样做,如果他们取悦,在这种情况下, Rails app应该遵守设置的Content-Type)。所以它应该默认为application/json

这将使用curl等进行测试很容易。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

一种方法是在API控制器中指定操作之前并设置JSON格式:

before_filter :default_request_format

private

def default_request_format
  request.format = :json
end

或者您可以在routes.rb中指定JSON格式。

答案 1 :(得分:1)

让所有API控制器继承自Api :: Controller类,只有respond_to:json

示例:

class Api::Controller < ActionController::Base
  respond_to :json
  before_filter :default_request_format

  private

  def default_request_format
    request.format = :json
  end
end

现在你的其他Api控制器可以继承它并自动响应JSON。

例如,您有一个名为'FooBar'的模型:

class Api::FooBarsController < Api::Controller
  def index
    @foobars = FooBar.all
    respond_with(@foobars)
  end
end