[英]how to post JSON data to my rails app?
我是新手。 我想通過Android應用程序使用我的其余API。 所以我想測試我的控制器是否處理POST請求。 我正在使用Chrome的高級REST客戶端發出POST請求。
錯誤
錯誤的請求400-休息客戶端(Chrome)
更新1:日志輸出:
在2015年4月17日00:51:09 +0530為127.0.0.1啟動POST“ / android”,解析請求參數時發生錯誤。 內容:
{tablet_id:1,脈沖:2,pulse_timestamp: 'NOW()'}
ActionDispatch :: ParamsParser :: ParseError(795:'{tablet_id:1,pulse:2,pulse_timestamp:'NOW()'}'處的意外令牌):
我的rails控制器:
class Android::PulseFeedbacksController < ApplicationController
before_action :set_pulse_feedback, only: [:show, :edit, :update,:destroy]
respond_to json
# GET /pulse_feedbacks
# GET /pulse_feedbacks.json
def index
@pulse_feedbacks = PulseFeedback.all
respond_to do |format|
format.json { render json: @pulse_feedbacks }
format.xml { render xml: @pulse_feedbacks }
end
end
def create
@pulse_feedback = PulseFeedback.new(pulse_feedback_params)
respond_to do |format|
if @pulse_feedback.save
format.html { redirect_to @pulse_feedback, notice: 'Pulse feedback was successfully created.' }
format.json { render :show, status: :created, location: @pulse_feedback }
else
format.html { render :new }
format.json { render json: @pulse_feedback.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_pulse_feedback
@pulse_feedback = PulseFeedback.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def pulse_feedback_params
params[:pulse_feedback]
end
end
查看滑軌布線指南 。 特別是在定義為控制器創建的HTTP動詞類型的部分。 默認情況下,唯一的POST
是:create
。 但是,您可以通過更改路由來編輯路由,以顯式允許您自定義API的POST。
也許這會有所幫助:
def pulse_feedback_params
params.require(:pulse_feedback).permit!
end
但是,當然,服務器日志輸出將非常有幫助。
謝謝你們,經過很多努力后,它才能正常工作。 問題出在我的application_controller.rb和上面的json格式上。
我不得不對此行發表評論
before_action :authenticate_user!
在我的application_controller.rb文件中
class ApplicationController < ActionController::Base
respond_to :html, :json
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
#before_action :authenticate_user!
end
它不接受來自未授權客戶端的POST請求(因為我正在使用chrome-addon發出POST請求)
我的json格式應該是:
{
"pulse_feedback": {
"tablet_id": "1",
"pulse": "2",
"pulse_timestamp": "NOW()"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.