完成以下步骤后,camelCase
通过 JSON 请求提交的参数名称将更改为snake_case
.
例如,一个名为的 JSON 请求参数passwordConfirmation
将在控制器中被访问为params[:password_confirmation]
在 处创建一个初始化程序config/initializers/json_param_key_transform.rb
。该文件将仅更改 JSON 请求的参数解析行为(JSON 请求必须具有请求标头Content-Type: application/json
)。
找到您的 Rails 版本并选择下面的相应部分(在 中找到您的 Rails 版本Gemfile.lock
):
对于 Rails 5 和 6
对于 Rails 5 和 6,要将驼峰式参数键转换为蛇形,请将其放入初始化程序中:
# File: config/initializers/json_param_key_transform.rb
# Transform JSON request param keys from JSON-conventional camelCase to
# Rails-conventional snake_case:
ActionDispatch::Request.parameter_parsers[:json] = lambda { |raw_post|
# Modified from action_dispatch/http/parameters.rb
data = ActiveSupport::JSON.decode(raw_post)
# Transform camelCase param keys to snake_case
if data.is_a?(Array)
data.map { |item| item.deep_transform_keys!(&:underscore) }
else
data.deep_transform_keys!(&:underscore)
end
# Return data
data.is_a?(Hash) ? data : { '_json': data }
}
对于 Rails 4.2(可能还有更早的版本)
对于 Rails 4.2(可能还有更早的版本),要将驼峰式参数键转换为蛇形,请将其放入初始化程序中:
# File: config/initializers/json_param_key_transform.rb
# Transform JSON request param keys from JSON-conventional camelCase to
# Rails-conventional snake_case:
Rails.application.config.middleware.swap(
::ActionDispatch::ParamsParser, ::ActionDispatch::ParamsParser,
::Mime::JSON => Proc.new { |raw_post|
# Borrowed from action_dispatch/middleware/params_parser.rb except for
# data.deep_transform_keys!(&:underscore) :
data = ::ActiveSupport::JSON.decode(raw_post)
data = {:_json => data} unless data.is_a?(::Hash)
data = ::ActionDispatch::Request::Utils.deep_munge(data)
# Transform camelCase param keys to snake_case:
data.deep_transform_keys!(&:underscore)
data.with_indifferent_access
}
)
所有 Rails 版本的最后一步
重启rails server
。