Jersey 当HttpServer可以';我找不到资源

Jersey 当HttpServer可以';我找不到资源,jersey,http-status-code-404,httpserver,Jersey,Http Status Code 404,Httpserver,我想定制404响应,服务器(不是我)在找不到请求的资源时抛出该响应(或者我自己抛出一个定制的WebApplicationException,如果可以测试一个应用程序中是否存在请求的资源?可能在某处存储了一个资源列表?)。 请不要让我参考建议扩展WebApplicationException的解决方案,因为即使这样做,我的问题是在找不到资源时何时抛出它!但是当jersey框架找不到端点时,如何在jersey框架中表达这种需求呢。只需使用异常映射器将其转换为您选择的响应: import javax.

我想定制404响应,服务器(不是我)在找不到请求的资源时抛出该响应(或者我自己抛出一个定制的WebApplicationException,如果可以测试一个应用程序中是否存在请求的资源?可能在某处存储了一个资源列表?)。 请不要让我参考建议扩展WebApplicationException的解决方案,因为即使这样做,我的问题是在找不到资源时何时抛出它!但是当jersey框架找不到端点时,如何在jersey框架中表达这种需求呢。只需使用异常映射器将其转换为您选择的响应:

import javax.ws.rs.NotFoundException;
导入javax.ws.rs.core.Response;
导入javax.ws.rs.ext.ExceptionMapper;
导入javax.ws.rs.ext.Provider;
@提供者
公共类NotFoundExceptionMapper实现ExceptionMapper{
公共响应(NotFoundException){
返回Response.status(未找到Response.status.NOT_)
.实体(“无此类资源”)
.build();
}
}

到目前为止您尝试了什么
ExceptionMapper
可能会有帮助…您使用Jersey的哪个版本?它应该是Jersey 2.x,使用grizzly http server 2.3.0,我在这里尝试示例谢谢,但不幸的是,在将您的代码添加到我的主类所在的同一个包中之后,并运行
curl-g-ihttp://localhost:8080/base/@@@11
我收到的404没有内容,据我所知,
@Provider
在这里告诉服务器这是在找不到资源时要抛出的类,对吗?那该怎么做?!我不认为我需要在某个地方注册它,对吗?如果您已经配置了包扫描,并且在指定的包中放置了一个提供程序,那么它应该可以工作。JAX-RS中有几种类型的提供程序(请参阅更多信息:)。ExceptionMappers允许捕获任何要处理的异常并生成自定义响应。在本例中,我们正在处理NotFoundException,因为它是在找不到匹配资源时由服务器抛出的;Map initParams=new HashMap();initParams.put(ServerProperties.PROVIDER_包,NotFoundExceptionMapper.class.getPackage().getName())并将resourceConfig传递给GrizzlyHttpServerFactory.createHttpServer。太棒了!注册提供者或资源的另一个选项是为每个类单独注册。在这种情况下,它将是
resourceConfig.register(NotFoundExceptionMapper.class)
或通过init参数:
initParams.put(ServerProperties.PROVIDER\u CLASSNAMES,NotFoundExceptionMapper.class)
。但是,当您有许多资源和提供者时,包扫描非常有用。您可以将其设置为根包,然后使用
@Resource
@Provider
注释的每个类都会自动注册。