gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:53:07 27 4
gpt4 key购买 nike

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

我正在尝试为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com