最近,在我们的一个项目中,许多开发人员已开始使用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);
任何人都可以提供任何想法吗?