7

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

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

4

1 回答 1

1

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

如果在注解类型中声明的方法的返回类型不是以下之一,则为编译时错误:原始类型、字符串、类、对 Class 的任何参数化调用、枚举类型(第 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,所以你可能无法避免这种情况。

于 2013-06-11T14:17:13.253 回答