HTTP API状态代码的自定义文本

时间:2015-04-03 23:20:04

标签: http playframework http-status-codes

我正在我的HTTP服务中编写一个新端点,该端点构建在Play框架上,并返回特定错误的自定义状态代码(在这种情况下为442)。当我使用cURL测试端点时,我收到了预期的错误代码:

...
< HTTP/1.1 442 Client Error (442)
....

Postman REST Client相同:

Postman status with custom response code

我想做的是定制&#34;客户端错误&#34;文本,这样响应实际上会读取如下内容:

442 Forced Password Reset

这是可能的,还是在规范中,4xx类的任何自定义状态代码都将由所有客户端解释为&#34;客户端错误&#34;?

(我一直在查看relevant Play documentation on Statuses,但是没有看到任何选项来自定义纯文本状态代码整数本身。)

1 个答案:

答案 0 :(得分:5)

查看源代码,我花了很长时间才找到以下内容:

  1. Play只会将状态代码存储在RepsonseHeader中,而不是字符串
  2. Play使用Netty,并使用valueOf将状态代码转换为HttpResponseStatus,这基本上只是状态代码的case语句,如果不是标准的话,默认值基于范围。
  3. 虽然你可以用你想要的原因短语定义一个新的Netty HttpResponseStatus,但没有办法将它添加到valueOf方法(它是静态的)。
  4. 所以,没有重写Play的某些部分,没有任何真正好的解决方案。

    您可以使用某种后置过滤器来修改响应并更改原因短语,但我不知道它是如何工作的,或者即使可以在Play中编写这些类型的过滤器!

    最后,原因短语并不是那么重要,因为客户通常不会(也不应该)实际解析它。