2012-05-03 4 views
1

私のメインコントローラはパブリックユーザを対象としています。それは次のマッピングを持っています:Spring 3コントローラのマッピングの競合

@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に入っているスタイルシートのリクエストも、メインコントローラを経由します。これを避ける方法はありますか?

答えて

2

URLスキームを変更します。 Spring MVCで変数を使用してURLを開始することは非常に悪いことです。

どちらかあなたは絶対にあなたのURLスキームがどのように見えるかを変更できない場合は、最後の手段として...

/content/{contentId}ような何かにあなたのコンテンツ・リンクを変更したり、すべてのコンテンツの明示的なマッピングを作成、すなわち/sports/whateverユーザーに、Tuckey urlrewriteのようなものを使用して再書き込みを行います。

/xyz -> /content/xyz 

「管理者」または「静的」のような「既知」の文脈を除きます。

+0

私は、公然としていると思っていた以外は、あなたが電話/コンテンツと同じ結論に達しました。それにもかかわらず、これは私の既存の管理マッピングでは悲惨に失敗します。おそらく、これで動作するようにすべてのマッピングを再構成する方法があります。あなたが望むなら、私はあなたに戦争を送ります。しかし、たとえあなたがその努力をしても、Springが単純なwww.somesite.com/sports/nhlを処理できないことを示唆すると、urlは春が遅れていることを意味します。 – jacekn

+0

私はこの問題に関してSpringの代替案に関する質問を投稿し、いくつかの管理者はそれを閉じました。 :) http://stackoverflow.com/questions/10424825/spring-3-controller-mapping-conflicts – jacekn

+0

別の質問はここにあります:http://stackoverflow.com/questions/10442260/java-php-domino-something- else。なぜ、何人かの子供が閉会に飛びついたのかどうかわからない視界には春の解がないので、質問は有効です。 – jacekn

関連する問題