tomcat - Jersey :WebApplicationException 不显示自定义原因短语?

标签 tomcat jersey

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

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

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

最佳答案

如您所述,默认行为是异常的详细消息不包含在 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。

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

关于tomcat - Jersey :WebApplicationException 不显示自定义原因短语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37732351/

相关文章:

java - 如何配置项目(取决于 maven/web.xml/servlet API)AJAX 调用不包含项目名称?

tomcat - Tomcat实例上的多个SSL端口

java - 尝试使用 jersey 和 jaxb 时出现异常

serialization - 我们应该在 Jersey 2.5.1 中使用 jersey-media-json-jackson 还是 jackson-jaxrs-json-provider?

java - Swagger 的 JSON 文件上的空值

apache - 阻止 Apache tomcat 的未知 IP 地址

java - jsp文件在子域上不起作用

java - Jersey 安全文摘与基本身份验证

rest - 返回 OK (200) 而不是 NO_CONTENT (204)

java - 在服务器 : "NB: JAVA_HOME should point to a JDK not JRE". 上设置 Tomcat 7 .. 为什么?