我们有一个Rails应用程序,我们通过Restful界面添加Workorders。
这是控制器代码:
# POST /workorders
# POST /workorders.json
def create
@workorder = Workorder.new(params[:workorder])
respond_to do |format|
if @workorder.save
format.html { redirect_to @workorder, notice: 'Workorder was successfully created.' }
format.json { render json: @workorder, status: :created, location: @workorder }
else
format.html { render action: "new" }
format.json { render json: @workorder.errors, status: :unprocessable_entity }
end
end
end
添加工作订单时,响应来自以下代码行:
format.html { redirect_to @workorder, notice: 'Workorder was successfully created.' }
其他应用获得的回报是:
<html><body>You are being <a href="http://ndeavor.ameipro.com/workorders/50">redirected</a>.</body></html>
50是新的workorder.id,但我们无法解析它。
有没有办法将workorder.id放入返回的标题中?我们需要发送数据的应用程序来了解新的workorder.id是什么。
此外,有没有办法知道请求来自其他应用程序而不是在Rails ui中创建的新工作订单。
感谢您的帮助!!
更新1
请为我澄清一些关于REST的内容。如果restful输入是json,那么控制器用json回复?如果输入是html,控制器可以用json还是仅用html响应?
当我使用RestClient进行测试时,是否有人将此url转换为json输入或添加要求json响应的内容?
http://localhost:5000/types?type[id]=318&type[typecode]=test4
答案 0 :(得分:0)
response.headers['ETag'] = @workorder.id
可能有用。
但更好的方法是发送json并让客户端解析,而不是试图从HTML中删除数据。
查看Mule的documentation,看起来您应该能够像这样设置接受标头:
props.put("Accept", "application/json");
rails应用将以format.json
阻止响应。
或者,您可以通过从render :json
块中调出respond_to
来使其始终响应json:
def create
@workorder = Workorder.new(params[:workorder])
if @workorder.save
render json: @workorder, status: :created, location: @workorder
else
render json: @workorder.errors, status: :unprocessable_entity
end
end