Rails API在camelCase中呈现所有响应

时间:2019-03-17 18:32:51

标签: ruby-on-rails json ruby rails-api

我正在尝试获取我的Rails API以在camelCase中呈现所有JSON响应。目前,我正在为序列化程序使用Netflix Fast JSON API,并呈现如下错误:

render json: { errors: command.errors }, status: :unauthorized

对于Netflix Fast JSON API序列化程序,我一直在向每个序列化程序添加set_key_transform :camel_lower,这似乎可以解决问题(尽管如果有人知道如何将其设为默认值,将不胜感激)。

但是对于渲染错误,我不确定使用骆驼套的最佳方法。如果有人对此有任何经验,请告诉我您的处理方法!理想情况下,有一种方法可以做到这一点,即不会对每个渲染调用都增加太多语法。

更新

在序列化错误中,我在应用程序控制器上添加了一个辅助方法:

def render_error(errors_params, status)
  render json: {
    errors: errors_params
  }.deep_transform_keys { |key| key.to_s.camelize(:lower) }, status: status
end

对于Netflix Fast JSON API,我采纳了@spickermann的建议,并添加了一个应用程序序列化器,以供其他序列化器继承自:

class ApplicationSerializer
  include FastJsonapi::ObjectSerializer
  set_key_transform :camel_lower
end
class SomeSerializer < ApplicationSerializer
  attributes :attribute, :other_attribute
end

2 个答案:

答案 0 :(得分:1)

您可以创建一个ApplicationSerializer,所有其他序列化程序都可以从中继承:

class ApplicationSerializer
  include FastJsonapi::ObjectSerializer
  set_key_transform :camel_lower
end

class FooBarSerializer < ApplicationSerializer
  attributes :buzz, :fizz 
  # ...
end

答案 1 :(得分:1)

您可以猴子修补序列化程序

Rails.application.config.to_prepare do
  FastJsonapi::ObjectSerializer.class_eval do
    set_key_transform :camel_lower
  end
end

对于处理错误,您可能可以创建一个错误序列化器

render serializer: ErrorSerializer, json: {status: : unauthorized, errors: resource.errors 

看看herehere