استخدم جزءًا من عنوان URL كوسيطة لوحدة التحكم في SpringMVC
-
20-09-2019 - |
سؤال
على سبيل المثال، مع عنوان URL
foo.com/bar/99
99 سيكون متاحًا مباشرةً للطريقة الموجودة في وحدة التحكم كوسيطة.تم تعيين وحدة التحكم إلى /bar
بالنسبة لأي شخص مطلع على ASP.NET MVC أو Django، سيكون هذا مشابهًا لـways.MapRoute في الأول واستخدام (؟P\d+) في أنماط url في الأخير.
سيكون من الممكن معالجة البيانات الموجودة في كائن طلب Http مباشرةً للحصول على هذا، ولكني أرغب في معرفة ما إذا كان Spring MVC يحتوي على دعم مدمج لهذا (خاصة الإصدار 2.5).
المحلول
لا، الربيع لا يدعم هذا خارج الصندوق.ومع ذلك، يمكنك تعيين المسار إلى الطريقة اسم استخدام @RequestMapping وتكوينها بشكل مناسب InternalPathMethodNameResolver
:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
سيكون عليك تحديد prefix
ل InternalPathMethodNameResolver
كـ "do" لكي يعمل ما ورد أعلاه نظرًا لأن أسماء الطرق لا يمكن أن تبدأ برقم.إذا كنت ستستخدم "foo.com/bar/baz" كعنوان URL واستدعاء طريقتك baz
, ، لن يكون هناك أي تكوين إضافي ضروري.
إذا كنت لا تريد استخدام تعيين اسم الطريقة، فإن الحصول على "99" كمعلمة أمر سهل مثل الحصول عليه من request.getPathInfo()
في طريقتك.
نصائح أخرى
بالنسبة لأي شخص يستخدم Spring 3، تعلمت أنه يمكن القيام بذلك باستخدام التعليق التوضيحي @PathVairable الجديد
وإليك المثال من http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}