我也許應該指出的是,春天是不是其本身必然至關重要的這個問題,但我同時使用Spring,所以這個問題使用Spring中的情況下碰到過這種情況我在其中遇到了這個問題。春@RequestMapping值使用字符串數組「常量」
我有一個控制器類,它將請求GET
和POST
請求映射到特定表單的同一組URL。這種形式對於不同的區域設置不同的網址,但是隻有一個用於GET
請求的方法,以及一個用於POST
,由於在窗體的控制器級的邏輯爲每個區域設置部位相同(但事情在邏輯更深,如特定於語言環境的驗證,可能會有所不同)。例如:
@Controller
public class MyFormController {
// GET request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value={"/us-form.html", "/de-form.html", "/fr-form.html"},
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
形式GET
和POST
作品時這樣寫就好了。您會注意到用於@RequestMapping
值的String
陣列是相同的。我想要做的就是把這些URL到一個點(最好在控制器中的static final
場),這樣,當我們添加新的網址(對應於形式在未來本地化的網站),我們就可以在一個地方添加。所以,我想這個修改控制器:
@Controller
public class MyFormController {
// Moved URLs up here, with references in @RequestMappings
private static final String[] MY_URLS =
{"/us-form.html", "/de-form.html", "/fr-form.html"};
// GET request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.GET})
public String showMyForm() {
// Do some stuff like adding values to the model
return "my-form-view";
}
// POST request
@RequestMapping(value=MY_URLS, // <-- considered non-constant
method={RequestMethod.POST})
public String submitMyForm() {
// Do stuff like validation and error marking in the model
return "my-form-view"; // Same as GET
}
}
這裏的問題是,編譯器抱怨的value
屬性不再是一個常數。我知道Spring要求value
必須是一個常量,但我曾經認爲使用final
字段(或static final
在我的情況下)與Array
字面值包含String
字面值將會以「常量」的形式傳遞。在這裏,我懷疑是數組文本必須建立在這樣的飛行構造,這是未初始化時value
屬性解析。
我覺得這不應該是一個基本的Java知識,找出一個很難的事情,但事情是逃避我,我一直沒能找到任何答案了一些研究之後。有人可以證實我的懷疑,並且爲什麼會這樣做,或者否認我的懷疑並解釋實際問題是什麼?
注意:我不能簡單地將這些網址合併爲一個Path Pattern,因爲每個表單網址都處於其本地化網站的語言中,並且在這種情況下無法進行匹配。舉例來說,我只是將上面的「/{locale}-form.html」字符串作爲我的URL。
可能的重複[註釋屬性RequestMapping.value的值必須是常量表達式](http://stackoverflow.com/questions/14213723/the-value-for-annotation-attribute-requestmapping-value-must- be-a-constant-expre) – sp00m 2013-03-25 17:26:48
@ sp00m它確實可能是重複的。我不確定這是否是一個愚蠢的行爲,因爲那個提問者使用方法的返回值,而不是像我這樣的文字。 – ajp15243 2013-03-25 17:29:55