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

Vol*_*ker 7 java annotations spring-mvc 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() {
}
Run Code Online (Sandbox Code Playgroud)

在许多情况下,这会导致大量注释,其中真正的应用程序代码隐藏在其间的某个位置.此外,这个注释集经常重复,因为许多方法可能返回相同的错误代码集.

有没有选择通过将注释列表定义为其他类文件中的常量来缩短这一点?或许我可能忽略了一些更简单的事情?

我尝试在@ApiError某处定义项目数组,但这不会编译:

ApiError[] array = {ApiError(code = 123, reason = "Reason123")};
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*low 1

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

\n
\n

如果注释类型中声明的方法的返回类型不是以下之一,则为编译时错误:原始类型、String、Class、Class 的任何参数化调用、枚举类型 (\xc2\xa78.9 )、注释类型或元素类型为上述类型之一的数组类型 (\xc2\xa710)。

\n
\n

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

\n
\n

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

\n

V 是一个 ElementValueArrayInitializer,并且 V 中的每个 ElementValue(类似于数组初始值设定项中的 VariableInitializer)都与 E 相当;或者

\n

V 是与 E 相当的 ElementValue。

\n

V 的类型与 T 的赋值兼容 (\xc2\xa75.2),而且:

\n

如果 T 是基本类型或 String,并且 V 是常量表达式 (\xc2\xa715.28)。

\n

V 不为空。

\n

如果 T 是 Class 或 Class 的调用,并且 V 是类文字 (\xc2\xa715.8.2)。

\n

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

\n
\n

您的数组不是常量表达式,因此您的代码将无法编译。如果您预计会有大量注释列表,也许还有另一种方法来完成此任务。不过,我不了解 Swagger,因此您可能无法避免这种情况。

\n

  • 多么可惜 - 不知何故,我希望有一种聪明的方法可以解决这个问题,以某种方式重用一组注释:-( (2认同)
  • @EricJablow,这个新功能很好,但没有帮助。因为主题启动者不想在方法之间重复注释。他宁愿定义一次繁琐的注释并将其应用于其他方法。我对 Swagger 也有同样的问题。 (2认同)