繁体   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