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

Custom text for HTTP API status code

我正在我的基于 Play framework, and am returning a custom status code for a particular error (442 in this case). When I test the endpoint with cURL 构建的 HTTP 服务中编写一个新端点,我收到了预期的错误代码:

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

Postman REST Client相同:

我想做的是自定义 "Client Error" 文本,这样响应实际上会显示如下内容:

442 Forced Password Reset

这可能吗,或者在规范的某个地方,4xx class 的任何自定义状态代码都将被所有客户端简单地解释为 "Client Error"?

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

查看源代码,我很快就找到了以下内容:

  1. Play 只是将状态代码存储在 RepsonseHeader 中,而不是字符串
  2. Play 使用 Netty,并使用 valueOf 将状态代码转换为 HttpResponseStatus,这基本上只是状态代码的 case 语句,如果不标准则基于范围进行默认。
  3. 尽管您可以使用所需的原因短语定义新的 Netty HttpResponseStatus,但无法将其添加到 valueOf 方法(它是静态的)。

因此,如果不重写 Play! 的某些部分,就没有真正好的解决方案。

您也许可以使用某种 post-filter 来修改响应并更改原因短语,但我不知道它是如何工作的,或者即使可以写Play! 中的那些过滤器。

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