ruby-on-rails – 使用自定义MIME类型在Rails中解析JSON有效负载

具有RESTful接口的Rails应用程序需要使用基于“application / json”的自定义MIME类型接受POST数据.我们称之为MIME类型’application / vnd.com.example.Foo json’.

使用Mime :: Type.register在Rails中注册自定义MIME类型可以正常工作,因为应用程序识别“Accept:”标题中给出的MIME类型,并通过respond_to呈现JSON视图.

问题是控制器方法,如更新和创建,需要将自定义JSON格式的数据转换为params哈希.如果我将“Content Type:”标头设置为application / json,则数据将被解析为params散列.

但是,如果我将“Content Type:”标头设置为“applcation / vnd.com.example.Foo json”,则无法解析有效负载.

所以似乎MIME :: Type.register用于驱动respond_to块,但不是用于决定如何解析创建和更新方法的有效负载.

有任何想法吗?

最佳答案
对于那些可能感兴趣的人,我找到了自己问题的答案.

在mime_types.rb中使用类似的东西(或者可能在初始化序列的其他地方):

ActionController::Base.param_parsers[Mime::Type.lookup('application/vnd.com.example.foo+json')]=lambda do |body|
  JSON.parse body
end

一个问题:不要在上面的MIME类型中使用大写(即’application / vnd.com.example.Foo json’). Rails将MIME类型转换为全部小写,因此不会发现匹配它设置为大写.

转载注明原文:ruby-on-rails – 使用自定义MIME类型在Rails中解析JSON有效负载 - 代码日志