Javadoc非常适合扫描所有源文件并创建HTML页面来查看它.我想知道是否有一个类似的工具可以通过所有的Spring控制器并收集所有已经使用@RequestMapping注释的方法并生成一个列出它们的HTML页面.类似于伪站点地图,供开发人员确保控制器的唯一性和标准化.
如果已经在别处问过这个问题,我道歉.我无法想出一套适当的搜索条件来提供有用的结果.
最佳答案
这是一个非常好的问题,我经常会错过(并实现)这样的功能.
使用构建工具
>读取所有类(可能包含可配置的包列表)
>迭代这些类的所有方法
>读取注释
>并将输出写入HTML
使用注释处理
但我想这是一个场景,其中annotation processing也可能是一种方法.通常,您必须使用一些内部API来完成API中的操作,但使用Filer.createResource(...)
实际上应该可以开箱即用.
这是一个基本的实现:
public class RequestMappingProcessor extends AbstractProcessor{
private final Mapeton(RequestMapping.class.getName());
}
@Override
public synchronized void init(
final ProcessingEnvironment processingEnv){
super.init(processingEnv);
filer = processingEnv.getFiler();
}
@Override
public boolean process(
final Set extends TypeElement> annotations,final RoundEnvironment roundEnv){
for(final TypeElement annotatedElement : annotations){
final RequestMapping mapping =
annotatedElement.getAnnotation(
RequestMapping.class
);
if(mapping != null){
addMapping(mapping,annotatedElement,roundEnv);
}
}
assembleSiteMap();
return false;
}
private void assembleSiteMap(){
Writer writer = null;
boolean threw = false;
try{
final FileObject fileObject =
filer.createResource(
StandardLocation.CLASS_OUTPUT,"html","siteMap.html"
);
writer = fileObject.openWriter();
writer.append("galStateException(e);
} finally{
// with commons/io: IoUtils.closeQuietly(writer)
// with Guava: Closeables.close(writer,rethrow)
// with plain Java this monstrosity:
try{
if(writer != null){
writer.close();
}
} catch(final IOException e){
if(!threw){
throw new IllegalStateException(e);
}
} finally{
}
}
}
private void addMapping(final RequestMapping mapping,final TypeElement annotatedElement,final RoundEnvironment roundEnv){
final String[] values = mapping.value();
for(final String value : values){
map.put(
value,annotatedElement.getQualifiedname().toString()
);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。