注释属性RequestMapping.value的值必须是常量表达式

使用以下代码段时:

public class MyUrls { // properties get initialized using static{...} public final static String URL_HOMEPAGE = properties.getProperty("app.homepage"); } @Controller public class HomepageController { @RequestMapping(MyUrls.URL_HOMEPAGE) public String homepage() { return "/homepage/index"; } } 

我收到以下错误:

 The value for annotation attribute RequestMapping.value must be a constant expression 

但事实上, URL_HOMEPAGE确实是一个常量,因为它被声明为public final static 。 我错了吗? 如何解决这个问题?

虽然URL_HOMEPAGE是常量,但它的值可能不是,它只能在运行时确定。 我相信注释中使用的值必须在编译时可以解析。

它是一个常量,但在初始化请求映射后初始化。 您正在调用properties.getProperty("app.homepage"); 当类加载器加载您的类时,URL_HOMEPAGE尚未初始化,因此错误。
您需要将初始化字符串作为参数提供,例如“/ path / subpath”