将错误消息作为 JSON 对象发送

Posted

技术标签:

【中文标题】将错误消息作为 JSON 对象发送【英文标题】:Send error message as JSON object 【发布时间】:2011-02-24 21:26:45 【问题描述】:

我有两个 servlet:第一个 servlet 类似于客户端,并创建一个 HttpURLConnection 来调用第二个 servlet。

我想发送一个特殊的错误,格式像一个 JSON 对象,所以我这样调用 sendError 方法:

response.sendError(code, "json-object")

但是在第一个 servlet 中,当我使用 getResponseMessage 方法读取错误时,我只收到标准 HTTP 消息,而不是我的 json 对象作为字符串。

如何获取我的 json 字符串?

【问题讨论】:

【参考方案1】:

来自HttpServletResponse#sendError() javadoc:

服务器默认创建响应,使其看起来像包含指定消息的 html 格式的服务器错误页面,将内容类型设置为“text/html”,不修改 cookie 和其他标头。如果已为与传入的状态代码相对应的 Web 应用程序进行了错误页面声明,则它将优先于建议的 msg 参数返回。

因此,使用这种方法,您别无选择,只能自己从 HTML 响应中提取消息。 JSoup 在此可能是 useful。

要实现你想要的,你需要自己设置错误代码并编写响应,例如

response.setStatus(code);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);

顺便说一句,您也可以使用HttpServletResponse.SC_XXX constants 之一来代替code

【讨论】:

非常感谢。我对此有疑问,我发布了这个问题,你的建议是获取 json 字符串而不在 html 代码中找到它的唯一方法。

以上是关于将错误消息作为 JSON 对象发送的主要内容,如果未能解决你的问题,请参考以下文章

JSON 消息对象缺少 id 属性

使用不和谐机器人将多行字符串作为消息发送时出现布局错误

如何在php rabbitmq中将完整对象作为消息从生产者发送到消费者

Twilio 发送消息 API 错误 21603

改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul

在 Python 中将 Json 对象字符串作为系统日志消息发送