从新的Spring映射注释中合成RequestMapping注释

时间:2019-07-04 19:46:31

标签: java spring annotations

最近,在我们的一个项目中,许多开发人员已开始使用Spring的新注释进行映射(而不是旧的RequestMapping注释)。

这有一些令人讨厌的含义,例如断面等。我目前负责解决所有这些问题,而我受困于以下难题。

我们有一个实用程序类,它通过扫描一些软件包下的某些控制器类,获取各种控制器方法并仅获取RequestMapping批注以提取映射路径和方法来创建文档。

问题在于使用新注释时,此方法无法正常工作,需要进行增强。我在想以下。

创建一个将接受带注释的方法的新帮助器,检查是否有任何新的映射注释并将其综合为RequestMapping

到目前为止,我的进展包括以下帮助程序,该帮助程序成功地将任何给定的映射注释合成为RequestMapping

public static <A extends Annotation> RequestMapping synthesizeRequestMapping(Method method, Class<A> type) {
    A mapping = AnnotationUtils.getAnnotation(method, type);
    if (mapping != null) {
        Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(mapping);
        return AnnotationUtils.synthesizeAnnotation(attributes, RequestMapping.class, null);
    }
    return null;
    }

我的问题是如何进一步概括这一点。我尝试将对此的调用包装到只接受带注释的方法的方法中,并在静态注释列表上进行迭代,检查是否存在一个注释,然后将其合成为RequestMapping,如下所示:

public static <A extends Annotation> RequestMapping getSynthesizedFrom(Method method) {
        if (AnnotationUtils.getAnnotation(method, RequestMapping.class) != null) {
            return AnnotationUtils.getAnnotation(method, RequestMapping.class);
    }

        List<Class<A>> annotations = new ArrayList<>();
        annotations.add(DeleteMapping.class);

        for (Class<A> annotation : annotations) {
            if (method.getAnnotation(annotation) != null) {
                return synthesizeRequestMapping(method, annotation);
        }
    }
        return null;
    }

我的问题是我无法通过以下操作正确初始化列表:

List<Class<A>> annotations = new ArrayList<>();
annotations.add(DeleteMapping.class);

任何人都可以提供任何想法吗?

0 个答案:

没有答案