[英]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.