POST POST JSON时Params散列为空

时间:2015-10-14 18:51:49

标签: ruby-on-rails ruby json params

我正在使用"默认"从脚手架创建方法:

  def create
    @user = User.new(firstname: params[:firstname], surname: params[:surname])
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

(我知道我并没有在那里使用强参数,但无论如何:))。

当我使用非常特定的REST客户端发送POST请求时,params哈希不包含参数。当我查看request.body时,它包含JSON参数。此外,content_type是" application / json

要解决此问题,我必须

   before_filter :fix_json_params
   [...]
   def fix_json_params
      if request.content_type == "application/json"
        @reparsed_params = JSON.parse(request.body.string).with_indifferent_access
      end
    end

    private

    def params
      @reparsed_params || super
    end

但是,我不明白为什么?如果content_type正确,为什么没有正确解析我的json主体呢?有什么想法吗?

这是使用rails' 4.2.4'。

1 个答案:

答案 0 :(得分:0)

您需要配置params_warrper.rb:

控制器顶部的

放置:

wrap_parameters format: [:json]

然后它应该自动将其解析为JSON。