【问题标题】:jersey: WebApplicationException not displaying custom reason phrase?球衣:WebApplicationException 不显示自定义原因短语?
【发布时间】:2016-06-09 17:14:47
【问题描述】:

(这是对原始问题的编辑,以明确该问题不是重复的 - 标记为重复的问题涉及在响应中返回自定义错误消息,而不是自定义原因短语到官方错误代码)。

我正在尝试在 restful 服务中为给定的 Http 错误代码返回“自定义原因短语”(不在响应中创建自定义代码或返回自定义内容),而 WebApplicationException(msg, code) 失败了.我刚刚找到了一篇相关文章,解释了如何为 http 响应 (JAX/Jersey Custom error code in Response) 创建自定义状态对象,并将对其进行研究,看看是否可以将其用作解决方法。 但是,仍然想知道泽西人是否正在努力解决这个问题。我使用的是 Jersey 2.13 版本。

有关此问题的更多信息:HttpServletResponse.sendError(int code, String msg) 方法 确实 实际上按预期工作(直接调用时),但似乎是 ' WebApplicationException(msg, code) 调用中的 msg' 参数在调用 HttpServletResponse.sendError 方法之前丢失。 因此,服务的客户端总是会在响应中看到默认的 Http 错误代码原因短语。

【问题讨论】:

    标签: tomcat jersey


    【解决方案1】:

    如您所述,默认行为是异常的详细消息不包含在 HTTP 响应中。

    您可以定义一个自定义的ExceptionMapper 来满足您的需求。这是一个简单的例子:

    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<ClientErrorException> {
        @Override
        public Response toResponse(ClientErrorException ex) {
            return Response.status(ex.getResponse().getStatus())
                    .entity(ex.getResponse().getStatus() + " " + ex.getMessage())
                    .type(MediaType.TEXT_PLAIN).
                    build();
        }
    }
    

    此示例自定义 Jersey 对作为 ClientErrorException 子类的任何异常的响应(例如 BadRequestExceptionForbiddenException 等)。请注意,它在正文中包含异常消息 (ex.getMessage)回复。尽管此响应是纯文本,但它可以很容易地返回 JSON。

    一旦您知道要查找什么,就会有很多(更好的?)示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2015-07-09
      • 2019-11-22
      相关资源
      最近更新 更多