वसंत में कई @RequestMapping एनोटेशन का उपयोग कैसे करें?


247

क्या @RequestMappingकिसी विधि पर कई एनोटेशन का उपयोग करना संभव है ?

पसंद :

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}

जवाबों:


436

@RequestMappingएक String[]मान पैरामीटर है, इसलिए आपको इस तरह से कई मान निर्दिष्ट करने में सक्षम होना चाहिए:

@RequestMapping(value={"", "/", "welcome"})


2
उस ने कहा, मुझे वास्तव में मेरे आवेदन में काम करने के लिए "" या "/" मान प्राप्त करने में परेशानी हो रही है। क्या वे आपके लिए काम करते हैं?
एड ब्रानिन

क्या अलग-अलग सफलता के विचारों को जोड़ने और एकाधिक एनोटेशन का उपयोग करके प्रत्येक अनुरोध URL के साथ विचार बनाने का एक तरीका है?
k-den

@EdBrannin मुझे कई उपयोग करने की आवश्यकता है, कस्टम, हेडर, उपभोग,
परम

इसके अलावा मैं जानना चाहूंगा, मुझे कैसे पता चलेगा कि किस अनुरोध को कॉल किया गया है। क्या यह / या स्वागत है?
सिद्धार्थ

1
@ सिद्धार्थ 1. आप टाइप HttpRequest के पैरामीटर को जोड़ने और निरीक्षण करने में सक्षम हो सकते हैं। 2. यदि आप वास्तव में परवाह करते हैं कि किस मैपिंग को बुलाया गया था, तो शायद इस तकनीक का उपयोग न करें। ;)
एड ब्रनिन

24

मेरे परीक्षण से (वसंत 3.0.5), @RequestMapping(value={"", "/"}) - केवल "/"काम करता है, ""नहीं करता है। हालाँकि मुझे यह पता चला है @RequestMapping(value={"/", " * "})कि : " * "कुछ भी मेल खाता है, इसलिए यह कोई अन्य नहीं होने की स्थिति में डिफ़ॉल्ट हैंडलर होगा।


13

की जरूरत नहीं है। RequestMapping एनोटेशन वाइल्डकार्ड और एंटी-स्टाइल पथ का समर्थन करता है। यह भी लगता है कि आप केवल एक डिफ़ॉल्ट दृश्य चाहते हैं, ताकि आप डाल सकें

<mvc:view-controller path="/" view-name="welcome"/>

आपकी कॉन्फ़िग फ़ाइल में। यह रूट से सभी अनुरोधों को स्वागत योग्य दृश्य के लिए अग्रेषित करेगा।


क्या उन दो लाइनों के बीच कुछ होना चाहिए? मैं FreeMarkerViewResolver का उपयोग कर रहा हूं - इसलिए मुझे इस तरह से जाना होगा ... ठीक है, मुझे लगता है कि मैं सिर्फ कई ViewResolver बना सकता हूं।
wuntee

2
यह लचीलापन प्रदान नहीं करता है जो कई RequestMapping एनोटेशन प्रदान करेगा। उदाहरण के लिए, यदि मैं GET के साथ एक विधि समर्थन या तो "/" POST या मान के साथ "/ b" चाहता हूं। बेशक वर्कअराउंड काफी आसान है (एक तीसरी विधि में कार्यक्षमता को फिर से भरना), लेकिन सिर्फ यह कहना कि यह उपयोगी होगा।
सिमोन

1

सबसे छोटा तरीका है: @RequestMapping({"", "/", "welcome"})

यद्यपि आप भी कर सकते हैं:

  • @RequestMapping(value={"", "/", "welcome"})
  • @RequestMapping(path={"", "/", "welcome"})

1

अभी स्प्रिंग-बूट 2.0.4 का उपयोग करने के साथ - {} काम नहीं करेगा।

@RequestMapping

अभी भी स्ट्रिंग [] एक मूल्य पैरामीटर के रूप में है, इसलिए घोषणा इस तरह दिखती है:

 @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)

** अद्यतन - स्प्रिंग-बूट 2.2 के साथ काम करता है **

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)

वर्ग कोष्ठक अमान्य है। एक सरणी शाब्दिक के लिए मान्य सिंटैक्स ब्रेसेस {}
luis.espinal

@ luis.espinal स्क्वायर ब्रैकेट्स ने 2.0.4 स्प्रिंग-बूट संस्करण के साथ काम किया। मैं अपनी पोस्ट को अपडेट करूंगा।
फाल्कन

0

निम्नलिखित स्वीकार्य है:

@GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                     "/fixedPath/{some-name}/{some-id}/fixed" }, 
            produces = "application/json")

एक ही लागू किया जा सकता @RequestMappingके रूप में अच्छी तरह से


-2

यदि आप अभी भी उरई प्राप्त करना चाहते हैं, तो PathVariable एनोटेशन का उपयोग करना बेहतर है।

@PostMapping("/pub/{action:a|b|c}")
public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
...
}

या इसे अनुरोध वस्तु से पार्स करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.