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

mjs*_*sen 2 http http-status-codes playframework

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

...
< HTTP/1.1 442 Client Error (442)
....
Run Code Online (Sandbox Code Playgroud)

邮差REST客户端一样:

具有自定义响应代码的邮递员状态

我想要做的是自定义"客户端错误"文本,这样响应实际上会读取如下内容:

442 Forced Password Reset
Run Code Online (Sandbox Code Playgroud)

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

(我一直在查看关于状态相关Play文档,但没有看到任何选项来自定义文本 - 只有状态代码整数本身.)

Tha*_*yne 5

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

  1. Play只是将状态代码存储在RepsonseHeader中,而不是字符串中
  2. Play使用Netty,并使用valueOf将状态代码转换为HttpResponseStatus,这基本上只是状态代码的case语句,如果不是标准,则默认基于范围.
  3. 虽然你可以用你想要的原因短语定义一个新的Netty HttpResponseStatus,但没有办法将它添加到valueOf方法(它是静态的).

所以,没有重写Play的某些部分,没有任何真正好的解决方案!

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

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