首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Guice中的嵌套注释方法拦截

Guice中的嵌套注释方法拦截
EN

Stack Overflow用户
提问于 2016-03-21 12:16:00
回答 1查看 277关注 0票数 1

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

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

代码语言:javascript
复制
@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拦截器如下所示

公共类MapExceptionInterceptor实现MethodInterceptor {

代码语言:javascript
复制
@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;
    }
}

}

我正在使用下面的绑定

代码语言:javascript
复制
bindInterceptor(Matchers.any(), Matchers.annotatedWith(MapException.class), new MapExceptionInterceptor());

这样可以吗?还是我可以改进?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-27 09:45:17

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36130777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档