【问题标题】:Spring 3 controller mapping conflictsSpring 3 控制器映射冲突
【发布时间】:2012-05-12 13:56:55
【问题描述】:

我的主控制器为公共用户服务。它具有以下映射:

@Controller
@RequestMapping(value="/") 
public class HomeController extends BaseController {

@RequestMapping("/") // handles www.somesite.com
public ModelAndView request(Model model) {

@RequestMapping("/{contentId}")  // handles www.somesite.com/sports
public ModelAndView requestWithContentId(@PathVariable String contentId, Model model) {

@RequestMapping("/{contentId}/**") // handles www.somesite.com/sports/hockey/nhl , etc
public ModelAndView requestWithContentId2(@PathVariable String contentId, Model model) {

我还有一组管理控制器映射到匹配 /admin* 的路径。这是一个例子:

@Controller
@RequestMapping(value="/admin/article")
public class AdminArticleController extends BaseController
  1. 我发现我的主控制器映射具有更高的优先级。因此,对 /admin/article 的请求由主控制器处理,而不是由专用 AdminArticleController 处理。我该如何解决这个问题?

  2. 我还注意到对位于 /static/default.css 中的样式表的请求也通过主控制器。有没有办法避免这种情况?

【问题讨论】:

    标签: spring controller mapping


    【解决方案1】:

    更改您的 URL 方案。在 Spring MVC 中使用变量开始 URL 是非常糟糕的,因为您刚才演示的原因。

    要么将您的内容链接更改为/content/{contentId} 之类的内容,要么为所有内容创建显式映射,即/sports/whatever...

    作为最后的手段,如果您绝对无法更改您的 URL 方案在用户眼中的外观,请使用 Tuckey urlrewrite 之类的内容并重新编写:

    /xyz -> /content/xyz
    

    “已知”上下文(如“admin”或“static”)除外。

    【讨论】:

    • 我对你所说的 /content 得出了同样的结论,除了我认为 /public 更符合。然而,这对于我现有的管理映射来说非常失败。也许有办法重新配置所有映射来处理这个问题。如果你愿意,我会把我的战争送给你。但是,即使您付出了这些努力,建议不能让 Spring 处理简单的 www.somesite.com/sports/nhl url 意味着 spring 是迟钝的,甚至比我想象的还要严重。
    • 我在这个问题上发布了一个关于 Spring 替代品的问题,一些管理员将其关闭。 :) stackoverflow.com/questions/10424825/…
    • 另一个问题在这里:stackoverflow.com/questions/10442260/…。不知道为什么有些孩子会在关闭时跳起来。看不到弹簧解决方案,所以问题是有效的。
    • @jacekn 好吧,没有框架可以支持所有可能的用例。这并没有使他们迟钝,只是受到限制。我向您建议了一种常见的方法来解决它,但正如您在“替代”问题中所说的那样,“Url 重写只是不和我坐在一起”。如果您要基于非理性原因或“直觉”拒绝解决方案,那么我认为我无法进一步帮助您。
    • 它们是非常理性的感觉。对我来说不合理的是将项目建立在一个将自己宣传为友好的 url 处理程序的框架上,然后使用 url 重写来使事情正常进行。您提供的任何一个选项都不能直接回答所提出的问题。但是,您强化了我的观点,即我需要停止押注 Spring 并寻找更好的东西。感谢您的意见。
    猜你喜欢
    • 2020-08-30
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多