更改默认的Content-Type
result的内容类型会被自动推断通过作为响应体的Java值.
举个例子:
Result textResult = ok("Hello World!");
会自动设置 Content-Type 响应头为text/plain,当结果是:
JsonNode json = Json.toJson(object);
Result jsonResult = ok(json);
时 Content-Type 响应头是application/json.
这相当有用,但是有时候你可能会想改变它.使用 as(newContentType)方法来创建不同的Content-Type 响应头在相同的结果:
Result htmlResult = ok("<h1>Hello World!</h1>").as("text/html");
设置HTTP响应头
public Result index() {
response().setContentType("text/html");
response().setHeader(CACHE_CONTROL, "max-age=3600");
response().setHeader(ETAG, "xxx");
return ok("<h1>Hello World!</h1>");
}
注意:设置一个HTTP 响应头会自动覆盖前一个
设置和丢弃 cookies
Cookies 是一个特殊的HTTP headers,但是Play提供一系列的方法帮助你更简单的使用.
你可以很容易的添加Cookie到HTTP响应:
response().setCookie("theme", "blue");
如果你需要设置更多的细节,包括 path,domain,expiry你可以重载方法:
response().setCookie(
"theme", // name
"blue", // value
3600, // maximum age
"/some/path", // path
".example.com", // domain
false, // secure
true // http only
);
抛弃一个之前存储在浏览器的Cookie:
response().discardCookie("theme");
如果您设置cookie时,设置了一个路径或域名,请确保您丢弃Cookie的时候,使用相同的名字,路径和域名.浏览器将会匹配相同的名称,路径和域名.
为文本结果指定一个字符编码
对于一个基于文本的HTTP响应正确的处理字符编码是非常重要的.Play默认使用utf-8作为字符编码.
这个编码不止用于将响应发送的socket包中的字节转换,还会在 Content-Type 头中添加 ;charset=xxx.
编码可以在你生成Result的时候指定:
public Result index() {
return ok("<h1>Hello World!</h1>", "iso-8859-1").as("text/html; charset=iso-8859-1");
}