grails - 如何在 grails 响应中添加状态消息
问题描述
我创建了一个在每个未捕获的异常之后调用的方法并响应一个 gson 视图:
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 的 HttpServletResponse来构建response。
现在检查HttpServletResponse类的 java 文档。
只有 2 种方法来定义状态消息:
void setStatus(int sc, String msg)
已弃用。从 2.1 版开始,由于 message 参数的含义不明确。要设置状态代码,请使用 setStatus(int),要发送带有描述的错误,请使用 sendError(int, String)。void sendError(int sc, String msg)
使用指定状态向客户端发送错误响应并清除缓冲区。服务器默认创建响应,使其看起来像包含指定消息的HTML 格式的服务器错误页面,将内容类型设置为“text/html”。
第一个已弃用。第二个发送状态消息,但它不会发送正文 - 主要用于致命错误......
因此,官方通过 servlet 文档无法同时发送消息和正文作为响应。
这个问题很棘手。因为根据 Apache Tomcat,“自定义状态消息”功能将从版本 9 开始删除:https ://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html#Other
但是根据RFC2616 sec 6.1.1:这里列出的原因短语只是建议——它们可以被本地等效替换而不影响协议。
推荐阅读
- c++ - 使用 tbb::parallel_for 对数组进行非递归拆分迭代
- c++ - 为什么我们需要模板模板参数的模板特化
- excel - 如何在另一个工作簿中复制和粘贴过滤范围?
- python -
使用 python 的 re.sub() 在指定标签之间替换 \n - c - dev_net_set 在 Linux 中的作用是什么?
- android - react-native run-android 在删除 Gradle 目录时冻结
- java - 如何在谷歌服务插件更新后删除警告“警告:API 'variant.getMergeResources()' 已过时”?
- python - 如何修复“”TypeError:img应该是PIL Image。得到
我是初学者,我正在学习编写图像分类器。我的目标是创建一个
predict
函数。有什么建议可以解决吗?
在这个项目中,我想使用预测功能来识别不同的花种。所以我可以稍后检查他们的标签。
尝试修复:我已经使用了该
unsqueeze_(0)
方法并从 nu- ssl - ISPConfig LetsEncrypt 和自签名证书 BROKEN CONFIG
- azure-devops - 如何处理 Azure Pipeline 中自定义条件的 Null?