从Jersey RESTful Web服务中抛出信息性错误消息

时间:2011-05-25 12:37:37

标签: java rest glassfish jersey jax-rs

我有一个RESTful Web服务,它可以执行一些IO和数据库活动,以便返回结果。

我希望看到一些Exceptions,即由于没有设置预期变量或者我的数据库不再存在等而抛出异常......等等...

然而,当我抛出这些异常时,它们会被捕获并包含在HTTP 500 (Internal Server Error)异常中,这就是客户端得到的(与根异常相反)。

我想在这里看到我的异常,而不是必须查看应用程序服务器日志。

1 个答案:

答案 0 :(得分:2)

您可以实现一个返回所需内容的ExceptionMapper。因此,例如,它可以将堆栈跟踪的整个异常放到响应中。

这是你想要的客户端吗?我不确定。
对于客户来说,重建异常并重新抛出它可能是一项相当困难的工作。

此外,它非常不安全,因为堆栈跟踪会将服务器的内部代码暴露给客户端。

我建议您声明一些对客户端有意义的服务器错误代码以及您要公开的内容。例如:

  • 1000 - 与数据库的连接失败。
  • 2000 - 别的什么

因此,对于特定的异常,在ExceptionMapper中,您可以将服务器异常映射到错误代码,然后在客户端重新映射它们。