URL の一部を Spring MVC のコントローラーへの引数として使用する
-
20-09-2019 - |
質問
たとえば、URL を使用すると、
foo.com/bar/99
99 は、コントローラ内のメソッドで引数として直接使用できます。コントローラーは /bar にマッピングされます
ASP.NET MVC または Django に精通している人にとって、これは前者では Router.MapRoute、後者では URL パターンで (?P\d+) を使用することに似ています。
Http Request オブジェクトのデータを直接処理してこれを取得することは可能ですが、Spring MVC にこれに対するサポートが組み込まれているかどうか (特にバージョン 2.5) を知りたいです。
解決
いいえ、Spring はこれをそのままではサポートしていません。ただし、パスをメソッドにマップすることはできます 名前 を使用して @RequestMapping そして適切に設定された InternalPathMethodNameResolver
:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
指定する必要があります prefix
のために InternalPathMethodNameResolver
メソッド名は数字で始めることができないため、上記を機能させるには「do」としてください。URLとして「foo.com/bar/baz」を使用し、メソッドを呼び出す場合 baz
, 追加の構成は必要ありません。
メソッド名のマッピングを使用したくない場合は、パラメータとして '99' を取得するのは、 request.getPathInfo()
あなたの方法で。
他のヒント
は、春の3を使用して誰のために、私はこれは新しい@PathVairable注釈を使用して行うことができます学んできた。
//ブログ:ここでのhttpからの例です.springsource.com / 2009/03/08 /休憩・イン・春-3-MVC / の
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}