Postmanでpostリクエストが送れなくて泣いた男の話


Railsでapiモードを使い始めてpostmanを利用するようになりましたが、利用してからまだ3日と非常に日が浅く、しょーもないことでハマってしまいました。同じような人を出さないためにここに書き残そうと思います。ちなみにほんとに泣いてはいません。

環境

Rails 6.1.3

はじめに

結論から言います。自分の場合はjson形式にせずにtext形式で送っていたことがハマった原因でした。これを見て思い当たる節がある人は今すぐtext形式からjson形式に変えて送ってみましょう。ね、しょうもないでしょ?

やりたかったこと

postmanでpostリクエストを送ってcontactインスタンスを保存しようとしました。

contacts_controller.rb
class V1::ContactsController < ApplicationController
.
.
 def create
    @contact = Contact.new(contact_params)
    @contact.save
    render json: @contact, status: :created
 end
.
.
 private
    def contact_params
      params.require(:contact).permit(:first_name, :last_name, :email)
    end
end
routes.rb
Rails.application.routes.draw do
  namespace :v1 do
    resources :contacts
  end
end

これでhttp://localhost:3000/v1/contactsのpostにデータを送れば保存されるはずでした。

Postリクエスト失敗

Postmanで以下の形式でPostリクエストを送ることを試みます。

{
    "contact": {
        "email": "[email protected]",
        "first_name": "hoge",
        "last_name": "foo"
    }
}

あれ?
エラーが出てる...

解決

text形式からjson形式に変更すれば解決できました!

ここ(赤丸)を↓

こうして(json形式)...

できた!

おわりに

こんなので一日費やしてしまいました...。ちゃんと形式は確認しようね。おわり