是否有可能为@RequestMapping使用一个字符串而不是字符串的值?

问题描述:

有没有办法在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, 

只有文字值可以被分配注释属性,因为它们在处理注释时必须在编译时被知道。是的,您可以使用枚举值,其中“枚举值”为FooEnum.Example,但不包含接受字符串值的属性,并且您无法调用其上的方法。

+2

不是字面值* only *,而是常数(在编译时)的值,甚至像“”PO“+”ST“这样的表达式,只要它们的值为一个常量。这就是为什么'RequestMethod.POST'是注解中有效的属性值,但方法调用不是。 –

将URL绑定到枚举值似乎很有趣;如果我更新枚举,我不希望我的URL改变。你真的使用这些相同的枚举生成客户端链接吗?也许相反,你可以查询Spring的Handler bean的URL?

另外还有Spring Expression Language,但我只知道它在@Value注释,我不知道@RequestMapping

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