gpt4 book ai didi

grails - 如何在 grails 响应中添加状态消息

转载 作者:行者123 更新时间:2023-12-02 15:42:52 27 4
gpt4 key购买 nike

我创建了一个在每个未捕获的异常之后调用的方法并响应一个 gson View :

void handleError(){
respond([status: 500, view: "/customErr"], [
code : 500,
message : "whatever internal error",
])
}

这工作正常,但我遇到的主要问题是我的客户端(另一台充当客户端的服务器)正在接收状态为 500 的 http 响应,但状态消息为空。我检查了响应文档,但没有看到属性消息或其他内容。
如果我的客户收到以下内容:
wslite.rest.RESTClientException: 500 null

并且那个 null 是响应的状态消息,不是由 grails 设置的
如何在回复中添加详细信息?田园诗般的东西是这样的:
  respond([status: 500, statusMessage: "my custom 
message", view: "/customErr"], [
code : 500,
message : "whatever internal error",
])

最佳答案

grails 使用 Servlet API’s HttpServletResponse build response .

现在检查 HttpServletResponse 的 Java 文档类(class)。

只有 2 种方法来定义状态消息:

  • void setStatus(int sc, String msg) 已弃用 .从 2.1 版开始,由于 message 参数的含义不明确。要设置状态代码,请使用 setStatus(int),要发送带有描述的错误,请使用 sendError(int, String)。
  • void sendError(int sc, String msg) 使用指定状态向客户端发送错误响应并清除缓冲区。服务器默认创建的响应看起来像 HTML 格式的服务器错误页面 包含指定的消息,将内容类型设置为“text/html”。

  • 第一个已弃用。第二个发送状态消息,但它不会发送正文 - 主要用于 fatal error ......

    因此,官方通过 servlet 文档无法同时发送消息和正文作为响应。

    这个问题很棘手。因为根据 Apache Tomcat,“自定义状态消息”功能将从版本 9 开始删除: https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html#Other

    但根据 RFC2616 sec 6.1.1 : 这里列出的原因短语只是建议 -- 它们可能会被替换 通过本地等效而不影响协议(protocol)。

    关于grails - 如何在 grails 响应中添加状态消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929473/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com