我似乎无法在Apipie的文档中找到这一点。
我准备好了这个RESTful api,我想我会用Apipie记录它。所有精细和花花公子,以及param验证都很好,但是当验证失败时,我似乎无法让它在响应中抛出正确的HTTP代码。例如,我有这个POST / users方法,显然在我的数据库中创建了一个用户。很好,对吧?好吧,如果出现问题,它会响应422不可处理的实体,那很好,但是如果我把它扔给那些没有通过apipie验证的参数,那么就会产生窒息和抛出
这是一个很好的老式错误Failure/Error: post '/users.json', :user => d
Apipie::ParamInvalid:
Invalid parameter 'email' value "": Must match regular expression /[a-zA-Z0-9\-.]+\@[a-zA-Z0-9\-.]+\.[a-z]{2,}/.
# ./spec/requests/usersapi_spec.rb:66:in `block (3 levels) in <top (required)>'
假设我对email参数进行了regexp验证。相反,我非常希望它能很好地回应(可能在json中,或者用空体),并将respose的代码设置为422.
有什么想法吗?
编辑:是的,我知道我可以禁用apipie的验证,否则就这样做......
答案 0 :(得分:9)
希望你已经找到了答案 - 但是如果有人想要禁用Apipie的验证 - 这就是它。
Apipie.configure do |config|
config.validate = false
end
答案 1 :(得分:9)
您可以使用rescue_from,然后回复对您有意义的错误。
class ApplicationController < ActionController::Base
# ParamError is superclass of ParamMissing, ParamInvalid
rescue_from Apipie::ParamError do |e|
render text: e.message, status: :unprocessable_entity
end
# ...
end