bugfix> ruby-on-rails > 投稿

APIにPOSTリクエストを送信したい。ここに私のコードがあります:

conn = Faraday.new(url: BASE) do |faraday|
  faraday.response :logger
  faraday.request  :url_encoded
  faraday.headers['Content-Type'] = 'application/json'
  faraday.headers["Authorization"] = "bearer #{AppConfig.instance.access_token}"
  faraday.adapter Faraday.default_adapter
end
form_data = {a: 1, b: 2}
conn.post("/api/test", form_data)

しかし、私はこのエラーを受け取ります:

NoMethodError (undefined method `bytesize' for {:a=>1, :b=>2}:Hash)

私も試しました:

conn.post("/api/test", form_data.to_json)

しかし、それも機能しません。

回答 1 件
  • 公式のファラデーリポジトリは次の説明を提供します。

    # post payload as JSON instead of "www-form-urlencoded" encoding:
    conn.post do |req|
      req.url '/nigiri'
      req.headers['Content-Type'] = 'application/json'
      req.body = '{ "name": "Unagi" }'
    end
    
    

    そのため、コンテンツタイプ「application/json」はハッシュを解決できません。 Gemは、本体データをそれ自体で必要な形式に変換しません。

    form_dataをstring( json に変換する必要があります ) フォーマット:

    form_data = {a: 1, b: 2}.to_json
    
    

    注意。 .to_s で変換しない  解析エラーの原因となるため、シンボルキー形式を使用する場合。

    ファラデー構成を提供することで、format_dataをjsonに変換した後にエラーが発生することはありません。そのため、ファラデーgemや提供されたコードに関連しない新しいエラー。

あなたの答え