java在jersey中以编程方式注册提供程序,该提供程序实现exceptionmapper
我如何在jersey中以编程方式注册我的提供者,它实现了jersey API提供的Exceptionmapper?我不想使用@Provider注释,而是想使用ResourceConfig注册提供程序,我该怎么做
例如:
public class MyProvider implements ExceptionMapper<WebApplicationException> extends ResourceConfig {
public MyProvider() {
final Resource.Builder resourceBuilder = Resource.builder();
resourceBuilder.path("helloworld");
final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE)
.handledBy(new Inflector<ContainerRequestContext, String>() {
@Override
public String apply(ContainerRequestContext containerRequestContext) {
return "Hello World!";
}
});
final Resource resource = resourceBuilder.build();
registerResources(resource);
}
@Override
public Response toResponse(WebApplicationException ex) {
String trace = Exceptions.getStackTraceAsString(ex);
return Response.status(500).entity(trace).type("text/plain").build();
}
}
这是正确的方法吗
# 1 楼答案
如果您正在使用Spring,并且希望基于
@Path
和@Provider
注释的存在以编程方式注册提供程序,那么可以使用以下技术# 2 楼答案
我猜你没有
ResourceConfig
,因为你似乎不知道如何使用它。首先,它不是必需的。如果你使用它,它应该是它自己的独立类。在那里你可以注册地图绘制者但你可能正在使用网络。xml。在这种情况下,您可以使用以下
<init-param>
注册提供者有关不同部署模型的更多信息,请查看What exactly is the ResourceConfig class in Jersey 2? 。部署应用程序有几种不同的方法。你甚至可以混合搭配(web.xml和ResourceConfig)
# 3 楼答案
尽管@paul samsotha的答案是正确的,但仍然存在实现技巧。我想分享它,希望它能帮助别人
a)实现映射器:
b)确保声明泛型类型,否则将永远不会调用映射程序
并可能引发
c)将其注册为资源:
或者
d)还要确保执行处理错误: