簡體   English   中英

在Play中返回HTTP狀態“已創建”! 骨架

[英]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()動作。

所以,你有幾個選擇。

  1. 不要呈現響應,讓客戶端在創建它之后處理它的位置(不理想)。
  2. 而不是調用show(),只需在create()方法中自己渲染...

要使用選項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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM