gpt4 book ai didi

java - Guice中的嵌套注释方法拦截

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:54 26 4
gpt4 key购买 nike

我搜索了很多,但找不到任何有用的东西。

问题:我创建了自定义注释,例如:

@MapExceptions(value = {
@MapException(sources = {IllegalArgumentException.class, RuntimeException.class}, destination = BadRequestException.class),
@MapException(sources = {RuntimeException.class}, destination = BadRequestException.class)
})

我正在使用 Guice 进行 DI。

  1. 我必须编写两个方法拦截器吗?实际工作是在 @MapException 中完成的
  2. 如果是,那么如何从 @MapExceptions 拦截器调用方法调用 @MapException 拦截器调用方法?我不想重复代码。
  3. 我的 @MapException 拦截器如下所示

公共(public)类MapExceptionInterceptor实现MethodInterceptor {

@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
try {
return invocation.proceed();
} catch (Exception actualException) {
Method method = invocation.getMethod();
Annotation[] annotations = method.getDeclaredAnnotations();
for (Annotation annotation : annotations) {
if (annotation instanceof MapException) {
MapException mapException = (MapException) annotation;
Class<? extends Throwable> destinationClass = mapException.destination();
Class<? extends Throwable>[] sourceClasses = mapException.sources();
for (Class sourceExceptionClass : sourceClasses) {
if (actualException.getClass().isInstance(sourceExceptionClass)) {
Constructor ctr = destinationClass.getConstructor(String.class);
throw (Throwable) ctr.newInstance(actualException.getMessage());
}
}
}
}
throw actualException;
}
}

}

我当前正在使用以下绑定(bind)

bindInterceptor(Matchers.any(), Matchers.annotatedWith(MapException.class), new MapExceptionInterceptor());

这样可以吗?或者我可以改进吗?

谢谢!

最佳答案

所以,内部注释只是一个数据包。为了解决这个问题,我为外部注释(MapExceptions)编写了拦截器,它完成了所有工作。

关于java - Guice中的嵌套注释方法拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com