5

使用以下代码片段时:

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。我错了吗?如何解决这个问题?

4

2 回答 2

7

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

于 2013-01-08T11:35:11.390 回答
1

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

于 2013-01-08T11:21:45.347 回答