2013-06-11 35 views
5

我正在使用Spring MVC实现各种REST服务。对于文档,我使用Swagger。将多个注释合并为一个以避免重复使用

这工作很好,文件看起来不错,真的功能。我遇到的唯一问题是文档注释真的使控制器类拥挤,尤其是错误代码注释。

例子:

@ApiErrors(value = { 
    @ApiError(code = 123, reason = "Reason123"), 
    @ApiError(code = 124, reason = "Reason124"), 
    @ApiError(code = 125, reason = "Reason125"), 
    @ApiError(code = 126, reason = "Reason126"), 
    @ApiError(code = 127, reason = "Reason127") }) 
public void exampleFunctionImplementation() { 
} 

在许多情况下,这将导致在真正的应用程序代码的某处隐藏在注释之间大块。另外,这些注释集经常重复,因为许多方法可能会返回相同的一组错误代码。

是否有任何选项通过在另一个类文件中定义其他地方的注释列表作为常量来缩短这一点?或者,也许更简单,我可能忽略了?

我试图定义的@ApiError项目某处阵列,但是这不会编译:

ApiError[] array = {ApiError(code = 123, reason = "Reason123")}; 

我会很高兴,如果有人可以给我一个提示,如何解决这个问题,在此先感谢!

+0

你们都有同样的问题:http://stackoverflow.com/questions/14195155/ibatis-create-an-array-of-multiple-annotations-annotation-reuse – Anderson

回答

1

注释成员只有有限的类型(JLS 9.6)。

它是一个编译时间错误,如果在注释类型中声明的方法的返回类型不是以下中的一个:原始类型,字符串,类,类中的任何参数调用,枚举类型( §8.9),注释类型或数组类型(§10),其元素类型是前述类型之一。

它们的值必须是常量表达式(JLS 9.7)。该标准使用术语相称的

T是一个数组类型E [],并且:

V是单位为V的ElementValueArrayInitializer并且每个ElementValue(类似于VariableInitializer在数组初始)是相称为E;或

V是ElementValue是相称E.

的V型的是分配兼容(第5.2节)与T,进而:

如果T是原始类型或字符串,并V是一个常量表达式(§15.28)。

V不为空。

如果T是Class或Class的调用,并且V是类文字(第15.8.2节)。

如果T是枚举类型,并且V是枚举常量。

你的数组不是一个常量表达式,所以你的代码不会编译。如果你预计有大量的注释列表,也许有另一种方法来完成这项任务。我不知道Swagger,所以你可能无法避免这种情况。

+1

太可惜 - 不知何故,我希望在那里将是一个聪明的方法,以某种方式重用一组注释:-( – Volker

+0

Java 8将帮助。请参阅http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html –

+1

@EricJablow,this新功能是好的,但它不会帮助,因为主题starter不想复制方法之间的注释,他想要定义繁琐的注释一次,并将其应用于其他方法,我与Swagger有同样的问题。 – walv

相关问题