Java Jersey:如何使用自定义的“ExceptionApperFactory”`
我需要使用自定义的Java Jersey:如何使用自定义的“ExceptionApperFactory”`,java,jersey,jersey-2.0,Java,Jersey,Jersey 2.0,我需要使用自定义的异常外观工厂来实现自定义的查找()逻辑 public class MyExceptionMapperFactory extends ExceptionMapperFactory { // [...] @Override public <T extends Throwable> ExceptionMapper<T> find(Class<T> type) { // [...] } } 有什
异常外观工厂
来实现自定义的查找()
逻辑
public class MyExceptionMapperFactory extends ExceptionMapperFactory {
// [...]
@Override
public <T extends Throwable> ExceptionMapper<T> find(Class<T> type) {
// [...]
}
}
有什么想法吗?蒂亚 我从未实现过这一点,所以我不知道所有的细微差别,但简单地看一下和,看起来您只需要 不确定如何禁用原始版本,但如果它仍在使用,您可以尝试为您的工厂禁用,以便在查找时,您的版本将优先
bindAsContract(MyExceptionMapperFactory.class)
.to(ExceptionMappers.class)
.ranked(Integer.MAX_VALUE)
.in(Singleton.class);
更新 由于排名不起作用,下面的内容似乎会删除原来的工厂
@Provider
public class ExceptionMapperFactoryFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
final ServiceLocator locator = ServiceLocatorProvider.getServiceLocator(context);
final Descriptor<?> descriptor = locator.getBestDescriptor(new Filter() {
@Override
public boolean matches(Descriptor d) {
return d.getImplementation().equals(ExceptionMapperFactory.class.getName());
}
});
ServiceLocatorUtilities.removeOneDescriptor(locator, descriptor);
context.register(new AbstractBinder() {
@Override
public void configure() {
bindAsContract(MyExceptionMapperFactory.class)
.to(ExceptionMappers.class)
.in(Singleton.class);
}
});
return true;
}
}
@Provider
公共类例外ApperFactoryFeature实现该功能{
@凌驾
公共布尔配置(FeatureContext上下文){
最终ServiceLocator定位器=ServiceLocatorProvider.getServiceLocator(上下文);
最终描述符描述符=locator.getBestDescriptor(新过滤器(){
@凌驾
公共布尔匹配(描述符d){
返回d.getImplementation().equals(exceptionApperFactory.class.getName());
}
});
ServiceLocatorUtilities.removeOneDescriptor(定位器,描述符);
register(新的AbstractBinder(){
@凌驾
public void configure(){
bindAsContract(MyExceptionMapperFactory.class)
.to(例外Appers.class)
.在(独生子女班);
}
});
返回true;
}
}
谢谢。不幸的是,它不起作用。即使我将秩设置为Integer.MAX\u VALUE
,新值也会被完全忽略。是否尝试使用最小值?也许我弄错了。如果这不起作用,我以后可能需要对它进行测试,它与Integer.MIN_值相同。它仍然被忽略。请尝试删除它。可能会有错误。我懒得打开IDE。您需要注册该功能。如果有什么用,请告诉我。
bindAsContract(MyExceptionMapperFactory.class)
.to(ExceptionMappers.class)
.ranked(Integer.MAX_VALUE)
.in(Singleton.class);
@Provider
public class ExceptionMapperFactoryFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
final ServiceLocator locator = ServiceLocatorProvider.getServiceLocator(context);
final Descriptor<?> descriptor = locator.getBestDescriptor(new Filter() {
@Override
public boolean matches(Descriptor d) {
return d.getImplementation().equals(ExceptionMapperFactory.class.getName());
}
});
ServiceLocatorUtilities.removeOneDescriptor(locator, descriptor);
context.register(new AbstractBinder() {
@Override
public void configure() {
bindAsContract(MyExceptionMapperFactory.class)
.to(ExceptionMappers.class)
.in(Singleton.class);
}
});
return true;
}
}