Http 在Play 2.2 Scala中操纵响应状态文本
有人知道如何操作Scala Play 2.2中的HTTP状态文本吗? 我发现很容易指定状态代码,但不能指定附带的文本 我感兴趣的原因是,我正试图模拟一个我需要使用的web服务,它将特定信息放在状态文本中 例如,当登录尝试失败时,我将从此服务获取以下代码段(curl输出): 以下是我想在我虚构的天真世界里做的事情:Http 在Play 2.2 Scala中操纵响应状态文本,http,playframework-2.2,Http,Playframework 2.2,有人知道如何操作Scala Play 2.2中的HTTP状态文本吗? 我发现很容易指定状态代码,但不能指定附带的文本 我感兴趣的原因是,我正试图模拟一个我需要使用的web服务,它将特定信息放在状态文本中 例如,当登录尝试失败时,我将从此服务获取以下代码段(curl输出): 以下是我想在我虚构的天真世界里做的事情: Unauthorized(views.html.invalidlogon(message)).withHeaders( CONTENT_TYPE -> "text/plain
Unauthorized(views.html.invalidlogon(message)).withHeaders(
CONTENT_TYPE -> "text/plain"
).setStatusText(message)
谢谢你的帮助
编辑-其他信息
所以事实证明我真正想要的是一个原因短语
根据报告,他们说:
< HTTP/1.1 401 Unauthorized
< ...
def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
val nettyResponse = new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
...
这里列出的原因短语只是建议——它们可以被本地等价物替换,而不会影响协议
特别令人感兴趣的是对现有错误代码使用MAY
但是,如果在播放中我返回自定义4XX错误,则原因短语仅为4XX状态分类后的客户端错误。最好能控制原因短语,以便它与自定义响应状态代码一起使用。事实上的响应状态是一个数字值,因此它是硬编码的 如果您确实需要,最好添加自定义标题,即:
Unauthorized("You can't login now, sorry...").withHeaders(
CONTENT_TYPE -> "text/plain; charset=utf-8",
"X-Error-Message" -> "Login or password invalid"
)
提示:出于安全原因,在登录过程中要小心过于描述性的错误消息。查看播放代码后,我认为目前不可能这样做 如果您查看,他们会执行以下操作:
< HTTP/1.1 401 Unauthorized
< ...
def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
val nettyResponse = new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
...
调用httpresponsetus.valueOf(header.status)不允许添加原因短语
在一个纯粹虚构的(可能是可疑的)世界中,以下变化可能允许这种情况:
def createNettyResponse(header: ResponseHeader, closeConnection: Boolean, httpVersion: HttpVersion) = {
val nettyResponse = header.reasonPhrase match {
case Some(reasonPhrase) => new DefaultHttpResponse(httpVersion, HttpResponseStatus(header.status, header.reasonPhrase))
case _ => new DefaultHttpResponse(httpVersion, HttpResponseStatus.valueOf(header.status))
}
...
然而,这样的变化会产生巨大的涟漪效应
所以如果我是对的,这是不可能的,我会看看大家怎么想
谢谢你的回复。事实上,我查看了规范,似乎我要寻找的是原因短语。一些图书馆称之为状态文本,正如我所发现的,这是一个用词不当的词。不幸的是,我试图模拟一个现有的服务,所以额外的头(虽然合理)不是一个选项。