Java 使用字符串数组";常数;在Spring@RequestMapping值中

Java 使用字符串数组";常数;在Spring@RequestMapping值中,java,spring,controller,constants,Java,Spring,Controller,Constants,我可能应该指出,Spring本身并不一定对这个问题至关重要,但我在使用Spring时遇到了这种行为,所以这个问题使用了Spring中我遇到这种情况的情况 我有一个控制器类,它将GET和POST请求映射到特定表单的同一组URL。此表单对于不同的区域设置有不同的URL,但是对于GET请求只有一种方法,对于POST,只有一种方法,因为表单的控制器级别的逻辑对于每个区域设置站点都是相同的(但是逻辑中更深的部分,比如特定于区域设置的验证,可能会有所不同)。例如: @控制器 公共类MyFormControl

我可能应该指出,Spring本身并不一定对这个问题至关重要,但我在使用Spring时遇到了这种行为,所以这个问题使用了Spring中我遇到这种情况的情况

我有一个控制器类,它将
GET
POST
请求映射到特定表单的同一组URL。此表单对于不同的区域设置有不同的URL,但是对于
GET
请求只有一种方法,对于
POST
,只有一种方法,因为表单的控制器级别的逻辑对于每个区域设置站点都是相同的(但是逻辑中更深的部分,比如特定于区域设置的验证,可能会有所不同)。例如:

@控制器
公共类MyFormController{
//获取请求
@RequestMapping(值={/us form.html“,“/de form.html”,“/fr form.html”},
方法={RequestMethod.GET})
公共字符串showMyForm(){
//做一些事情,比如给模型添加值
返回“我的表单视图”;
}
//后请求
@RequestMapping(值={/us form.html“,“/de form.html”,“/fr form.html”},
方法={RequestMethod.POST})
公共字符串submitMyForm(){
//在模型中执行验证和错误标记之类的操作
返回“我的表单视图”;//与GET相同
}
}
表单
GET
POST
在这样编写时工作得很好。您会注意到,用于
@RequestMapping
值的
字符串
数组是相同的。我想做的是将这些URL放在一个位置(理想情况下是控制器中的
静态final
字段),这样当我们添加新的URL(对应于未来本地化站点中的表单)时,我们就可以将它们添加到一个位置。因此,我尝试对控制器进行此修改:

@控制器
公共类MyFormController{
//将URL移到此处,并在@RequestMappings中引用
私有静态最终字符串[]我的URL=
{“/us form.html”、“/de form.html”、“/fr form.html”};
//获取请求

@RequestMapping(value=MY_url,//你说得对,这与Spring无关,所有注释参数都必须是编译时常量。这是java语言的基本规则

将数组引用标记为final并不能将其删除,因为这仍然是完全合法的:

MY_URLS[0] = "es-form.html";

另外,你是如何将语言环境嵌入到url中的?你是在模拟传统链接吗?Spring有很多内置的对使用浏览器实际语言环境的支持。

可能是@sp00m的重复,它可能确实是重复的。我不确定它是否是重复的,因为提问者使用了方法的返回v值,而不是像我这样的文字。关于
我的URL[0]
的好观点应该考虑到这一点的含义(我最近一直深入JavaScript领域)。不幸的是,我被限制使用特定于语言环境的URL,因为我们编写此代码的客户端需要它,并对其进行更改(如果可能的话,首先)这将是一个艰难的过程(主要是客户方面,但我们可能会从这个过程中得到某种形式的痛苦)。我们还有几个遵循这个惯例的表单URL,它们已经或即将上线,在最后一分钟更改不会有任何乐趣。