我有一個create
行動在玩!框架控制器應返回HTTP狀態代碼Created
並將客戶端重定向到創建的對象的位置。請參閱method chaining in the Play! framework documentation。在Play中返回HTTP狀態「創建」!框架
上面的代碼返回狀態代碼302 Found
而不是201 Created
。我可以做些什麼來讓Play恢復正確的狀態(和Location
標題)?
我有一個create
行動在玩!框架控制器應返回HTTP狀態代碼Created
並將客戶端重定向到創建的對象的位置。請參閱method chaining in the Play! framework documentation。在Play中返回HTTP狀態「創建」!框架
上面的代碼返回狀態代碼302 Found
而不是201 Created
。我可以做些什麼來讓Play恢復正確的狀態(和Location
標題)?
發生這種情況的原因在於,一旦您創建了自己的東西,您就會通過調用show
操作告訴您遊玩Show
。
爲了達到這個目的,play正在執行重定向(保持其RESTful狀態),告訴瀏覽器由於調用create()
動作,它現在必須重定向到show()
動作。
所以,你有幾個選項。
要使用選項2,它可能看起來像下面這樣:
public static void create() {
Something something = new Something();
something.save();
response.status = StatusCode.CREATED;
renderTemplate("Application/show.html", something);
}
示例代碼用於設置Play框架中的狀態碼: Response.current()。status = Http.StatusCode.CREATED;
在播放框架中,調用另一個動作會執行重定向,但被調用的動作不是公共的。 所以,這裏是解決方案之一:
public class SomeController extends Controller {
public static void create() {
Something something = new Something();
something.save();
response.status = StatusCode.CREATED; // Doesn't work!
show(something.id);
}
private static void show(long id) {
render(Something.findById(id));
}
}
'201 Created'應當連同'Location'頭,其不會與解決方案2.發生?你能詳細說明溶液1發,我不明白它? – deamon
解決方案1不好。它基本上是說,在你的請求創建後,然後請求show(),所以你的流程決定了客戶端(即javascript),而不是你的行爲中的服務器端。 – Codemwnci
我已經檢查了Play(1.2.3)和Redirect對象的源代碼,有一個代碼,默認爲302.它有一個構造函數來提供不同的代碼,但是這個構造函數似乎沒有用在框架。 – Codemwnci