将多个注释组合成一个以避免重复它们

时间:2013-06-11 13:46:42

标签: java spring-mvc annotations swagger

我正在使用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")};

如果有人能提前告诉我如何解决这个问题,我会很高兴,提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

  

如果在注释类型中声明的方法的返回类型不是以下之一,则是编译时错误:基本类型,字符串,类,类的任何参数化调用,枚举类型(第8.9节) ,注释类型或数组类型(第10节),其元素类型是前面的类型之一。

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

  

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

     

V是一个ElementValueArrayInitializer,V中的每个ElementValue(类似于数组初始化器中的VariableInitializer)与E相当;或

     

V是一个与E相称的ElementValue。

     

V的类型与T分配兼容(第5.2节),此外:

     

如果T是基本类型或字符串,则V是常量表达式(第15.28节)。

     

V不为空。

     

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

     

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

您的数组不是常量表达式,因此您的代码将无法编译。如果您预计有大型注释列表,可能还有另一种方法可以执行此任务。我不知道Swagger,所以你可能无法避免这种情况。