2011-09-06 73 views
5

有沒有辦法在RequestMapping中使用枚舉值?是否有可能爲@RequestMapping使用一個字符串而不是字符串的值?

@RequestMapping(value = "/example", 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

我想使用已經存儲在枚舉一個URL值。

但是,當我嘗試在RequestMapping中放入除String字符串之外的任何內容時,會出現編譯時錯誤。

它如何知道一個字符串字符串和一個不是字符串字符串的字符串之間的區別(不知道是什麼)?

這是我嘗試,但它沒有在編譯時:

@RequestMapping(value = FooEnum.Example.getStringValue(), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

我使用String.format也嘗試過,但它不喜歡,要麼:

@RequestMapping(value = String.format("%s", FooEnum.Example.getStringValue()), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

回答

1

只有文字值可以被分配註釋屬性,因爲它們在處理註釋時必須在編譯時被知道。是的,您可以使用枚舉值,其中「枚舉值」爲FooEnum.Example,但不包含接受字符串值的屬性,並且您無法調用其上的方法。

+2

不是字面值* only *,而是常數(在編譯時)的值,甚至像「」PO「+」ST「這樣的表達式,只要它們的值爲一個常量。這就是爲什麼'RequestMethod.POST'是註解中有效的屬性值,但方法調用不是。 –

0

將URL綁定到枚舉值似乎很有趣;如果我更新枚舉,我不希望我的URL改變。你真的使用這些相同的枚舉生成客戶端鏈接嗎?也許相反,你可以查詢Spring的Handler bean的URL?

另外還有Spring Expression Language,但我只知道它在@Value註釋,我不知道@RequestMapping

如果你想趕上多個URL在一個方法,你可以使用@PathVariable

相關問題