Lit*_*ski 6 java spring spring-mvc request spring-security
我有一个请求映射,可以在上下文之后处理任何字符串,例如www.example.com/anystring
我按如下方式处理:
@RequestMapping(value="/{str}", method = RequestMethod.GET)
public String getApp(@PathVariable("str") String anyString, ModelMap model) {
//Do something
}
Run Code Online (Sandbox Code Playgroud)
问题是我在我的应用程序的URL 2-3处网址如下:www.example.com/about,www.example.com/contact等.
我为他们编写了Request Mappings,如下所示:
@RequestMapping("/about")
public String getAboutPage() {
return "about";
}
Run Code Online (Sandbox Code Playgroud)
但很明显,因为我已经声明任何字符串应该被处理getApp(),所以getAboutPage()永远不会被执行.我怎样才能排除/about,/contact等从getApp()映射.我们显然可以在URL字符串中添加另一个关键字,但这在我的应用程序用例中是不可能的.请帮助.:(
编辑:
我应该处理/about,/contact内部getApp()像:
@RequestMapping(value="/{str}", method = RequestMethod.GET)
public String getApp(@PathVariable("str") String anyString, ModelMap model) {
if(anyString.equals("about")){
//do about related stuff
}
if(anyString.equals("contact")){
//do contact related stuff
}
//Do something
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
在“catch-all”映射中指定 HTTP 请求方法可能会使路径匹配器认为它比绝对路径映射更具体。
在绝对路径上指定请求方法,映射比较器应将绝对匹配排序在包含路径变量的匹配之前。
例如。
@RequestMapping("/about", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
或者,您可以删除 catch-all 上的方法规范:
@RequestMapping("/{str}")
Run Code Online (Sandbox Code Playgroud)
它完全取决于您的 url 结构以及这些路径是否接受不同的 http 请求方法。
| 归档时间: |
|
| 查看次数: |
5648 次 |
| 最近记录: |