jersey:WebApplicationException没有显示自定义原因短语?

时间:2016-06-09 17:14:48

标签: tomcat jersey

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

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

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

1 个答案:

答案 0 :(得分:0)

如您所述,默认行为是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();
    }
}

此示例针对ClientErrorException的子类的任何异常(例如BadRequestExceptionForbiddenException等自定义Jersey的响应。请注意,它包括异常的消息({{1 }})中。尽管此响应是纯文本,但也可以轻松返回JSON。

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