【发布时间】:2010-11-08 10:16:45
【问题描述】:
我在 Rails 2.3.5 上。在典型的用户控制器中创建操作
class UsersController
def create
@user = User.new(params[:user])
respond_to do |format]
if @user.save ...
else
format.json ....
end
end
end
当客户端传递一个无效/格式错误的 JSON 字符串作为输入时,Rails 会抛出一个 500 内部服务器错误,提示“无效的 JSON 字符串”。我是否可以捕获错误以便提供自定义消息?
更新这是所要求的堆栈跟踪。我很清楚,我知道这是一个格式错误的 JSON 字符串,我的问题不是如何修复 JSON 字符串,而是如何捕获这个特定错误,以便我可以发回比 HTTP 500 Internal Server Error 更有意义的错误消息.提前感谢您的帮助
Error occurred while parsing request parameters.
Contents:
user: {login: "John", email: "john@yahoo.com", password: "111"}}
/!\ FAILSAFE /!\ Mon Nov 08 02:01:04 -0800 2010
Status: 500 Internal Server Error
Invalid JSON string
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/json/backends/yaml.rb:14:in `decode'
c:1:in `__send__'
c:1:in `decode'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/params_parser.rb:42:in `parse_formatted_parameters'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/params_parser.rb:11:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/session/cookie_store.rb:93:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/failsafe.rb:26:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/lock.rb:11:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/lock.rb:11:in `synchronize'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/lock.rb:11:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:114:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/reloader.rb:34:in `run'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:108:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/rack/static.rb:31:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/urlmap.rb:46:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/urlmap.rb:40:in `each'
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/urlmap.rb:40:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/rack/log_tailer.rb:17:in `call'
...
c:/ruby/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/handler/mongrel.rb:34:in `run'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:111
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
script/server:3
re.rb:31:in `require'
script/server:3
【问题讨论】:
-
你能放一个完整的回溯吗?
标签: ruby-on-rails json