ruby-on-rails - Rails 中的无效 JSON 字符串错误

标签 ruby-on-rails json

我在 Rails 2.3.5 上。在典型的用户 Controller 中创建操作

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 内部服务器错误更有意义的错误消息.在此先感谢您的帮助
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

最佳答案

我发现这个 rails 插件可以在 rails 3.0.5 上工作:https://github.com/kares/request_exception_handler

罗伯·卡梅隆
建议它加载您的 rails 应用程序并从您的应用程序代码中引发 parseError 。我还没有测试过它的性能影响,但它似乎运行良好。

关于ruby-on-rails - Rails 中的无效 JSON 字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122933/

相关文章:

ruby-on-rails - Rails View 路径未被重置

ruby-on-rails - 在 S3 和 cloudfront 上使用 rails carrierwave 私有(private)文件

javascript - 在代码隐藏的 .cs 文件中访问 javascript 变量的值?

PHP mysql代码帮助解码

ruby-on-rails - 如何委派给范围? rails

ruby-on-rails - 如果能?在 Ruby on Rails 中

ruby-on-rails - Action Cable 5 需要 Redis 吗?

python - 将 JSON 转换为 pd.DataFrame

javascript - 如何更新对象属性

php - 在 Highcharts 中从 PHP 加载 JSON 编码数据时,条形图不显示