2017-04-24 10 views
7

मेरे पास एक वसंत बूट एप्लिकेशन है, जिसमें वसंत एमवीसी नियंत्रक है। मैं स्वीकृति शीर्षलेख का उपयोग कर अपने आराम एपीआई संस्करण का प्रयास कर रहा हूँ।वसंत एमवीसी नियंत्रक संस्करण

निम्नलिखित कैसे मेरे नियंत्रक

RestController 
@RequestMapping(value = "/private/") 
public class AppleController { 

    private final AppleService appleService; 

    public AppleController(AppleService appleService) { 
    this.appleService = appleService; 
    } 

    @GetMapping(value = "apples/{id}", produces = "application/json; v=1.0", 
     headers = "Accept=application/json; v=1.0") 
    public ResponseEntity getByappleId(@PathVariable("id") Long appleId) { 
    System.out.println("version1"); 

    GetByappleIdResponse response = appleService.findByappleId(appleId); 

    return new ResponseEntity<>(response, HttpStatus.OK); 
    } 



    @GetMapping(value = "apples/{id}", produces = "application/json; v=2.0", 
     headers = "Accept=application/json; v=2.0") 
    public ResponseEntity getByappleId2(@PathVariable("id") Long appleId) { 
    System.out.println("version2"); 
    GetByappleIdResponse response = appleService.findByappleId2(appleId); 
    return new ResponseEntity<>(response, HttpStatus.OK); 
    } 

संस्करण है कि मैं स्वीकार करता हूं शीर्षक में गुजर रहा है जब हमेशा एपीआई बुला का लिहाज किए बिना की तरह दिखता है "getByappleId" विधि, कहा जाता है इसलिए केवल संस्करण 1 प्रतिसाद दिया जाता है ।

क्या मेरे नियंत्रक में कुछ गड़बड़ है?

+0

स्वीकार में स्वीकार-पैरामीटर हैडर वसंत द्वारा इस्तेमाल नहीं किया जा रहा है की तरह लगता है । –

+0

http://stackoverflow.com/questions/34425316/spring-requestmapping-header-with-equals – heenenee

+0

विषय का संभावित डुप्लिकेट सिस्टम का उपयोग न करें। जब भी संभव हो तो लॉगजर का उपयोग करें –

उत्तर

2

के रूप में इस उत्तर में वर्णित: https://stackoverflow.com/a/34427044/258813 (और टिप्पणियों में उल्लेख किया है) वसंत ऐसा हेडर का उपयोग करके मार्ग का समर्थन नहीं करता।

यदि आप किसी संस्करण शीर्षलेख के माध्यम से रूटिंग का समर्थन करना चाहते हैं, तो मैं एक कस्टम रूटिंग स्थिति और एनोटेशन की अनुशंसा करता हूं - निश्चित रूप से यदि आप एक बड़ी एपीआई बना रहे हैं, तो इसका परिणाम कम कोड और अधिक सुरुचिपूर्ण समाधान होगा।

आप @ApiVersion(1) जैसे कुछ एनोटेशन को परिभाषित करेंगे कि आप किसी भी विधि में जोड़ सकते हैं जो अनुरोध मैपिंग भी है और फिर कस्टम रूटिंग स्थिति जोड़ें और यह सही तरीके से व्यवहार करेगा।

मैं कस्टम मार्ग की स्थिति और टिप्पणियों का उपयोग करने का वर्णन किया है (उप डोमेन के आधार पर - लेकिन यह है कि आसानी से बजाय शीर्षक देख में स्विच किया जा सकता है) यहाँ: http://automateddeveloper.blogspot.co.uk/2014/12/spring-mvc-custom-routing-conditions.html

+0

धन्यवाद –

+0

प्रतिक्रिया के लिए धन्यवाद यह बेहतर होगा कुछ कोड उदाहरण शामिल करने के लिए – LoganMzz

4

बाकी एपीआई के संस्करण को लागू करने के कई विकल्प होते हैं:

  • मैन्युअल रूप से अपने अनुरोध रूट करने के लिए टिप्पणी दृष्टिकोण में सुझाव दिया;
  • अपने स्वीकारें हैडर मूल्य का एक भाग के रूप में संस्करण बनाने, फ़े:

    @GetMapping("apples/v1/{id})"

    :

    (headers = "Accept=application/vnd.name.v1+json")

    (headers = "Accept=application/vnd.name.v2+json")

  • अपने मानचित्रण के एक भाग के रूप में संस्करण बनाने @GetMapping("apples/v2/{id})

तो आपको यह तय करने की आवश्यकता है कि किस तरह से जाना है। कुछ उपयोगी लिंक:

संबंधित मुद्दे