POST json to rails server

36,185

If you are sending in the right headers, then you won't need to do "ActiveSupport::JSON.decode" -- rails will do that for you.

You'll need to set the following headers in your post.

Content-Type: application/json
Accept: application/json

A 422 means Unprocessable Entity --- generally that there was a validation failure.

You should be able to have. If you can't, then your headers aren't set correctly.

def create
  if user = User.authenticate(params["email"], params["password"])
    session[:user_id] = user.id
    render :json => "{\"r\": \"t\"}" + req
  else
    render :json => "{\"r\": \"f\"}"
  end
end
Share:
36,185

Related videos on Youtube

Rohan
Author by

Rohan

Openstack, Python etc

Updated on July 09, 2022

Comments

  • Rohan
    Rohan almost 2 years
    def create
      req = ActiveSupport::JSON.decode(request.body)
      if user = User.authenticate(req["email"], req["password"])
        session[:user_id] = user.id
        render :json => "{\"r\": \"t\"}" + req
      else
        render :json => "{\"r\": \"f\"}"
      end
    end
    

    'create' method is in a controller and mapped to "/login", I am setting correct content types and accept headers from my curl client. I am getting a 422 http status response all the time.

    Any suggestions?

    • tokland
      tokland over 13 years
      no need to build the JSON response by hand: render :json => {:r => "f"}.as_json
  • Rohan
    Rohan over 13 years
    so all my json POST request body is put into the params[] hash automatically? So can i use more deep object structures in json and will they be parsed correctly?
  • Jesse Wolgamott
    Jesse Wolgamott over 13 years
    Yes. Deeper structures will require that you set the accepts_nested_attributes_for in your models. (parent accepts for child)
  • Ran
    Ran about 12 years
    BTW, a if you send the request headers to the server, make sure you use : and not =, as in: "Content-Type: application/json" and "Accepts: application/json"
  • Khalil Gharbaoui
    Khalil Gharbaoui almost 5 years
    @Ran its Accept not Accepts!