设置Response
文档原地址
https://playframework.com/documentation/2.6.x/JavaResponse
修改默认的Content-Type
Play会根据返回内容的Java值自动填充content-type
Result textResult = ok("Hello World!");
会将Content-Type填充为text/plain
JsonNode json = Json.toJson(object);
Result jsonResult = ok(json);
则会返回application/json
这非常有用,但是有时候也许你想修改。只要使用as(newContentType)
方法就可以返回一个不同的Content-type
Result htmlResult = ok("<h1>Hello World!</h1>").as("text/html");
设定HTTP相应头
public Result index() {
response().setHeader(CACHE_CONTROL, "max-age=3600");
response().setHeader(ETAG, "xxx");
return ok("<h1>Hello World!</h1>").as("text/html");
}
设定一个头部时之前的值会被抛弃
设置和抛弃Cookies
Cookies是HTTP头部中比较特殊的字段,Play提供了一个工具可以简单的创建Cookie。
response().setCookie(Cookie.builder("theme", "blue").build());
如果需要更多的细节,包括paht,domain,expiry,是否安装是否HTTP only标志需要设置,可以用下面的方式:
response().setCookie(
Cookie.builder("theme", "blue")
.withMaxAge(Duration.ofSeconds(3600))
.withPath("/some/path")
.withDomain(".example.com")
.withSecure(false)
.withHttpOnly(true)
.withSameSite(Cookie.SameSite.STRICT)
.build()
);
抛弃之前浏览器中的Cookie
response().discardCookie("theme");
当你设置了path或者domain,确保在抛弃cookie时使用了相同的值。浏览器只有在匹配的情况下才会抛弃。
指定编码格式
对于基于文本的HTTP响应,选择正确的编码格式非常重要。Play默认使用utf-8。
在生成Result时可以指定编码
public Result index() {
return ok("<h1>Hello World!</h1>", "iso-8859-1").as("text/html; charset=iso-8859-1");
}