【问题标题】:Rails API render all responses in camelCaseRails API 在 camelCase 中呈现所有响应
【发布时间】:2019-08-08 04:20:19
【问题描述】:

我正在尝试让我的 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

【问题讨论】:

  • 你可以给render打补丁。

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


【解决方案1】:

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

class ApplicationSerializer
  include FastJsonapi::ObjectSerializer
  set_key_transform :camel_lower
end

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

【讨论】:

    【解决方案2】:

    你可以给序列化器打补丁

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2011-01-28
      相关资源
      最近更新 更多