- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可能应该指出,Spring 本身对于这个问题并不一定至关重要,但是我在使用 Spring 时遇到了这种行为,所以这个问题使用了我在 Spring 中遇到这种情况的情况。
我有一个 Controller 类,它将 GET
和 POST
请求映射到特定表单的同一组 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
}
}
这样编写时,GET
和 POST
形式就可以正常工作。您会注意到用于 @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/
如何在Spring中忽略类级别@RequestMapping("/home")并直接调用方法级别@RequestMapping("/users")? @Controller @RequestMappi
让我们假设以下 Controller : @RestController public class MyController { @RequestMapping(method = GET, pat
我在使用 Spring Boot 时遇到了一些问题。 当我使用 @RequestMapping(value = "/home") 时,一切正常。但是当我使用 @RequestMapping(name
我正在尝试创建一个restful API(使用Spring Boot v2.0.0.Release),我希望有一个端点,但我希望有两种可能的用途: GET /time - outputs curren
我已经被这个错误困扰了几个小时。。我的pom.xml。应用程序未启动。所有的Spring框架依赖于相同的版本,但仍然得到相同的错误。。更新。MVN依赖的结果:树。看起来这里一切都很好。
我有以下三个 REST API 方法: @RequestMapping(value = "/{name1}", method = RequestMethod.GET) public Objec
我正在尝试为 spring @RequestMapping 注释创建值属性以像这样映射 url /educationDistrict/308/action/resetAddressesForYear/
如何定义 @RequestMapping 方法来显式允许匿名(未经授权)访问? 以下方法不起作用,总是收到 401 Unauthorized: @RequestMapping("/test") @Se
想象一下我有一个像这样的 Spring MVC Controller : @Controller @RequestMapping("/base-url") public class MyControl
如何处理除资源映射文件夹之外的所有 URL 请求? 在这个例子中,我处理了所有路径(这就是我想要的),但现在即使我设置也无法访问资源文件夹 里面dispatcher-servlet.xml @Req
我需要有一个/jsp/login 和/jsp/login?error 的映射 请注意,我无法使用/jsp/login?error=someval 然后检查参数是否具有该值或默认值。在这种情况下,不允许
让 Tomcat 启动并自动显示 index.jsp 文件的内容没有任何问题。然而,当我尝试使用 @Controller 和 @RequestMapping 时,我遇到了错误。这是我的 Control
我有以下文件夹结构: WEB-INF/ -- 页数/ ----home.jsp ----admin.jsp ----admin2.jsp ----admin3.jsp 我有以下 Controller
我正在使用 Spring Boot,并尝试显示 get 请求。我正在使用 2 个类:Greeting.java 和 GreetingController: package greeting;
我正在尝试使用 @RequestMapping与 consumes -元素。阅读API-document它适用于 Content-Type - 请求头。但是,使用 @RequestMapping(co
我已经为此打开了一个问题 here.但我也想问一下 stackoverflow 的人。 @Controller @RequestMapping("/xxx") public class MyContr
我想在我的 Spring Boot 应用程序中创建一个自定义注释,它总是向我的类级别 RequestMapping 路径 添加一个前缀。 我的 Controller : import com.sage
鉴于下面的@Controller,即使我向 webApp 发送 Get 请求, Controller 也会运行 homePage 方法。 @RestController @RequestMapping
我正在尝试设置 Controller ,但不幸的是无法查看输出...一切都正确渲染。当我访问 http://localhost:8080/CMT/content/edit 时,我得到一个 404 页面
在我的 Spring Controller 中,我创建了 3 个方法。方法 1 和方法 2 工作正常,但方法 3 给我带来问题 问题: org.springframework.web.servlet.
我是一名优秀的程序员,十分优秀!