Java JAX-RS 404未找到异常标记

Java JAX-RS 404未找到异常标记,java,rest,exception,jax-rs,Java,Rest,Exception,Jax Rs,如果没有找到匹配的JAX-RS资源,我正在寻找显示自定义错误页面的方法。我的想法是使用异常apper,但我不知道要使用的异常类: @Provider public class NotFoundMapper implements ExceptionMapper<WHATEXCEPTION?> { ... } @Provider 公共类NotFoundMapper实现ExceptionMapper{ ... } RestEasy有一个专有的NotFoundException,但是

如果没有找到匹配的JAX-RS资源,我正在寻找显示自定义错误页面的方法。我的想法是使用
异常apper
,但我不知道要使用的异常类:

@Provider
public class NotFoundMapper implements ExceptionMapper<WHATEXCEPTION?> {
  ...
}
@Provider
公共类NotFoundMapper实现ExceptionMapper{
...
}

RestEasy有一个专有的
NotFoundException
,但是有没有一种方法也适用于Jersey?理想的标准兼容方式?

您的意思是,如果您的rest服务在localhost/rest下侦听,那么localhost/rest/asdf应该返回一个定制的404页面吗?它是特定于JAX-RS引擎的,您必须检查Jersey的源代码。例如,CXF抛出一个WebApplicationException,但它不提供任何自定义它的方法。请参见jaxrsinterceptor.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);

总而言之,没有好的标准方法,您可以尝试使用请求筛选器或异常apper

Jersey实现自己的我正在使用Jersey 2.0(里程碑),并且只能在客户端找到一个。你知道Jersey 2.0在找不到资源时会使用什么异常吗?我还不熟悉Jersey 2.0。在我的Jersey 1.8应用程序中,我抛出
com.sun.Jersey.api.NotFoundException
,也可以使用
javax.ws.rs.WebApplicationException
,您可以将异常和
javax.ws.rs.core.Response
实例传递给它的构造函数。如果将
响应
构建为404状态,则Jersey应该解决问题。问题在于状态不正确,因为如果未找到请求的资源,Jersey将返回404错误代码。但我希望处理此错误代码以返回自定义错误页(而不是默认的空白页)。在这种情况下,您可以在
web.xml
中定义错误页<代码>404 jsp的路径。这是一个非常简单的解决方案。如果您不喜欢,则
响应
的生成器允许您将
可查看的
实例作为实体传递。
Viewable
构造函数接受一个POJO和一个JSP名称。我的意思是,框架发出信号,表示未找到资源,我希望处理这个问题(异常)。我不想抛出我自己的异常,我想得到框架抛出的异常。哦,我明白了。那么你的意思是如果你的rest服务正在监听,那么你应该返回一个定制的404页面吗?它是特定于JAX-RS引擎的,您必须检查Jersey的源代码。例如,在CXF中,在这种情况下会抛出WebApplicationException。这是一个标准的javax异常,其他引擎可能会抛出相同的异常。在cxf中,您可以检查JAXRSInInterceptor processRequest行156以了解如何处理它。总而言之,没有好的、标准的方法,您可以尝试使用请求过滤器或例外情况。如果你用你的评论代替你的答案,我会接受它作为解决方案。