10

2 つのスプリング コントローラー マッピングがあります。

@Controller
public class ContentController {

    @RequestMapping(value = "**/{content}.html")
    public String content(@PathVariable String content, Model model, HttpServletRequest request) {
    }
}

@Controller
public class HomeController {

    @RequestMapping(value = "**/home")
    public String home(HttpServletRequest request, Model model) {
    }
}

次の URL は両方のマッピングに一致します: /home.html

ただし、「コンテンツ」マッピングが常に「ホーム」マッピングよりも優先されるようにしたいと考えています。それを特定する方法はありますか?

4

4 に答える 4

0

URL マッピングは、マッピングが検出された順序によって決定されます。

したがって、一方のコントローラーをもう一方のコントローラーの後にスプリング コンテキストで強制的に作成することができます。

これは、Bean 定義 (xml 内) の depends-on="" 属性を使用して行うことができます。

最初に見つけたマッピングを使用するのか、最後に見つけたマッピングを使用するのかはわかりません。

また、これは単なる理論であり、実際にこれを試したことはありません。

次のようなログ メッセージが表示されます。

17:29:01.618 [main] INF S o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler    'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
17:29:01.625 [main] INF S o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler 'org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0'

SimpleUrlHandlerMapping を見て、それがどのように機能するかを確認する価値があります。

于 2013-01-21T16:54:43.313 に答える
-3

この url(/home.html) は両方のマッピングに一致しません:

    @RequestMapping(value = "**/{content}.html")
    ...
    @RequestMapping(value = "**/home")
    …

接尾辞「 .html」が付いているため、最初のものと一致します。

于 2013-01-22T05:41:56.103 に答える