如果没有找到匹配的 JAX-RS 资源,我正在寻找呈现自定义错误页面的方法。我的想法是使用ExceptionMapper
,但我不知道要使用的异常类:
@Provider
public class NotFoundMapper implements ExceptionMapper<WHATEXCEPTION?> {
...
}
RestEasy 有一个专有的NotFoundException
,但是有没有一种方法也可以与 Jersey 一起使用?理想情况下符合标准的方式?
你的意思是如果你的休息服务在 localhost/rest 下监听,那么 localhost/rest/asdf 应该返回一个自定义的 404 页面?它特定于 JAX-RS 引擎,您必须查看 Jersey 的源代码。例如,CXF 抛出一个 WebApplicationException,但它没有提供任何自定义方法。请参阅 JAXRSInInterceptor.processRequest() 第 156 行以了解它是如何完成的:
org.apache.cxf.common.i18n.Message errorMsg =
new org.apache.cxf.common.i18n.Message("NO_ROOT_EXC",
BUNDLE,
message.get(Message.REQUEST_URI),
rawPath);
LOG.warning(errorMsg.toString());
Response resp = JAXRSUtils.createResponse(resource, message, errorMsg.toString(),
Response.Status.NOT_FOUND.getStatusCode(), false);
throw new WebApplicationException(resp);
总而言之,没有很好的标准方法,您可以尝试使用请求过滤器或 ExceptionMapper