Ruby 葡萄API修改参数存在错误

Ruby 葡萄API修改参数存在错误,ruby,rack,grape,grape-api,Ruby,Rack,Grape,Grape Api,如您所知,您可以指定管线中需要一个参数,如下所示: requires:province,:type=>String 但是,我希望能够更改抛出的错误,并在没有给出参数时提供我自己的错误JSON 我怎样才能轻松做到这一点?我对猴子补法很满意 编辑:我看到第191行rescue\u from,这看起来可能有帮助,但我不确定如何使用它。 由于您基本上只是想重新构造错误,而不是完全更改文本,因此可以使用自定义错误格式化程序 例如: require "grape" require "json" modul

如您所知,您可以指定管线中需要一个参数,如下所示:

requires:province,:type=>String

但是,我希望能够更改抛出的错误,并在没有给出参数时提供我自己的错误JSON

我怎样才能轻松做到这一点?我对猴子补法很满意

编辑:我看到第191行
rescue\u from
,这看起来可能有帮助,但我不确定如何使用它。
由于您基本上只是想重新构造错误,而不是完全更改文本,因此可以使用自定义错误格式化程序

例如:

require "grape"
require "json"

module MyErrorFormatter
  def self.call message, backtrace, options, env
      { :response_type => 'error', :response => message }.to_json
  end
end

class MyApp < Grape::API
  prefix      'api'
  version     'v1'
  format      :json

  error_formatter :json, MyErrorFormatter

  resource :thing do
    params do
      requires :province, :type => String
    end
    get do
      { :your_province => params[:province] }
    end
  end
end

“自己的错误”是什么意思?您是想更改文本,还是以不同的结构显示错误?后者完全可以通过自定义格式化程序实现。您能否提供一个示例,说明您当前收到的缺少参数的信息以及您希望看到的信息?@NeilSlater现在的信息类似于
{“error”:“missing parameter name”}
,但我想将其重新构造为
{“response\u type”:“error”,“response”:“missing parameter name”}
curl http://127.0.0.1:8090/api/v1/thing?province=Cornwall
{"your_province":"Cornwall"}

curl http://127.0.0.1:8090/api/v1/thing
{"response_type":"error","response":"missing parameter: province"}