استخدم جزءًا من عنوان URL كوسيطة لوحدة التحكم في SpringMVC

StackOverflow https://stackoverflow.com/questions/1534695

سؤال

على سبيل المثال، مع عنوان 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";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top