gpt4 book ai didi

java - 在 Spring @RequestMapping 值中使用字符串数组 "constant"

转载 作者:行者123 更新时间:2023-12-01 23:11:28 25 4
gpt4 key购买 nike

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

我有一个 Controller 类,它将 GETPOST 请求映射到特定表单的同一组 URL。此表单对于不同的区域设置具有不同的 URL,但只有一种用于 GET 请求的方法,以及一种用于 POST 的方法,因为表单的 Controller 级别的逻辑对于每个语言环境站点来说都是相同的(但逻辑中更深层的内容,例如特定于语言环境的验证,可能会有所不同)。示例:

@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
}
}

这样编写时,GETPOST 形式就可以正常工作。您会注意到用于 @RequestMapping 值的 String 数组是相同的。我想要做的是将这些 URL 放入一个位置(最好是 Controller 中的静态最终字段),这样当我们添加新 URL(对应于 future 本地化站点中的表单)时,我们可以只需将它们添加到一处即可。所以我尝试对 Controller 进行这样的修改:

@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 ),其中包含 String 文字的 Array 文字将作为“常量”传递。我的怀疑是,数组文字必须以这样的方式即时构造,以便在解析 value 属性时它未初始化。

我觉得凭借基本的 Java 知识,这应该不是什么难事,但有些东西让我无法理解,经过一番研究后我还没有找到任何答案。有人可以证实我的怀疑并给出引用或很好的解释为什么会这样,或者否认我的怀疑并解释实际问题是什么?

注意:我不能简单地将 URL 组合成 Path Pattern ,因为每个表单 URL 均采用其本地化站点的语言,因此不可能进行匹配。为了举例,我只是将上面的“/{locale}-form.html”字符串作为我的 URL。

最佳答案

你是对的,这与Spring无关,所有Annotation参数都必须是编译时常量。这是基本的 Java 语言规则。

将数组引用标记为final并不会减少它,因为这仍然是完全合法的:

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

此外,您对将语言环境嵌入到 URL 中的态度如何?您是否正在模仿旧版链接? Spring 对使用浏览器的实际语言环境提供了大量内置支持。

关于java - 在 Spring @RequestMapping 值中使用字符串数组 "constant",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com