[英]Return HTTP Status “created” in Play! Framework
我在Play中有一個create
動作! 應該返回HTTP狀態代碼的框架控制器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);
}
public static void show(long id) {
render(Something.findById(id));
}
}
另請參閱Play中的方法鏈接! 框架文檔 。
上面的代碼返回狀態代碼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;
在play框架中,調用另一個動作會執行重定向,但被調用的動作不是公共的。 所以,這是一個解決方案:
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));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.