(这是原始问题的编辑,以明确此问题不重复 - 标记为重复的问题涉及在响应中返回自定义错误消息,而不是自定义原因短语到官方错误代码)。
我试图在一个宁静的服务中为给定的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错误代码原因短语。
答案 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
的子类的任何异常(例如BadRequestException
,ForbiddenException
等自定义Jersey的响应。请注意,它包括异常的消息({{1 }})中。尽管此响应是纯文本,但也可以轻松返回JSON。
一旦您知道要查找的内容,就有很多(更好?)示例。