具有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类型转换为全部小写,因此不会发现匹配它设置为大写.