2012-07-02 5 views

उत्तर

159

16.3.3.4 Mapping the request body with the @RequestBody annotation नामक दस्तावेज़ों में एक संपूर्ण अनुभाग है। और एक को 16.3.3.5 Mapping the response body with the @ResponseBody annotation कहा जाता है। मेरा सुझाव है कि आप उन वर्गों से परामर्श लें। इसके अलावा प्रासंगिक:

JQuery की तरह एक जावास्क्रिप्ट पुस्तकालय का उपयोग करना, आप इस तरह एक JSON-वस्तु पोस्ट होगा:: @RequestBody javadocs, @ResponseBody javadocs

उपयोग के उदाहरण कुछ इस तरह होगा

{ "firstName" : "Elmer", "lastName" : "Fudd" } 

आपका अब

// controller 
@ResponseBody @RequestMapping("/description") 
public Description getDescription(@RequestBody UserStats stats){ 
    return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits"); 
} 

// domain/value objects 
public class UserStats{ 
    private String firstName; 
    private String lastName; 
    // + getters, setters 
} 
public class Description{ 
    private String description; 
    // + getters, setters, constructor 
} 

यदि आप अपने classpath पर Jackson है: नियंत्रक विधि इस प्रकार दिखाई देगा (और <mvc:annotation-driven> सेटअप है), वसंत पोस्टिंग बॉडी से आने वाले JSON को UserStats ऑब्जेक्ट में परिवर्तित कर देगा (क्योंकि आपने @RequestBody एनोटेशन जोड़ा है) और यह लौटा ऑब्जेक्ट JSON पर क्रमबद्ध करेगा (क्योंकि आपने @ResponseBody एनोटेशन जोड़ा था)। तो ब्राउज़र/ग्राहक इस JSON परिणाम देखेंगे:

{ "description" : "Elmer Fudd hates wacky wabbits" } 

एक पूरा काम कर उदाहरण के लिए मेरा यह पिछले जवाब देखें: https://stackoverflow.com/a/5908632/342852

नोट: RequestBody/ResponseBody पाठ्यक्रम JSON तक ही सीमित नहीं की है, दोनों कर सकते हैं सादा पाठ और एक्सएमएल सहित कई प्रारूपों को संभाल लें, लेकिन जेएसओएन शायद सबसे ज्यादा इस्तेमाल किया जाने वाला प्रारूप है।


अद्यतन: कभी स्प्रिंग 4.x के बाद से, आप आमतौर पर विधि स्तर पर @ResponseBody, बल्कि @RestController वर्ग स्तर पर उपयोग नहीं होगा, एक ही प्रभाव के साथ। देखें Creating REST Controllers with the @RestController annotation

+2

धन्यवाद बहुत सारे @ सेन – leo

+0

आपके लिंक किए गए उत्तर में, आपने पैरामीटर पर '@ ResponseBody' एनोटेशन का उपयोग किया, विधि नहीं। मुझे इसे विधि पर रखने की कोशिश करने में त्रुटियां मिलती हैं, इसलिए मुझे लगता है कि आपका दूसरा उत्तर सही है। मुझे लगता है कि आपको 'getDescription (@RequestBody UserStats आंकड़े)' ऊपर होना चाहिए। – Patrick

+1

@ पैट्रिक संख्या, '@ अनुरोधबॉडी' पैरामीटर पर है, '@ ResponseBody' विधि पर है। महत्वपूर्ण अंतर! –

0
package com.programmingfree.springshop.controller; 

import java.util.List; 

import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import com.programmingfree.springshop.dao.UserShop; 
import com.programmingfree.springshop.domain.User; 


@RestController 
@RequestMapping("/shop/user") 
public class SpringShopController { 

UserShop userShop=new UserShop(); 

@RequestMapping(value = "/{id}", method = RequestMethod.GET,headers="Accept=application/json") 
public User getUser(@PathVariable int id) { 
    User user=userShop.getUserById(id); 
    return user; 
} 


@RequestMapping(method = RequestMethod.GET,headers="Accept=application/json") 
public List<User> getAllUsers() { 
    List<User> users=userShop.getAllUsers(); 
    return users; 
} 


} 

ऊपर के उदाहरण वे अब मैं दोनों आईडी और नाम का उपयोग करना चाहते सभी उपयोगकर्ता और विशेष रूप से आईडी विवरण प्रदर्शित करने के लिए जा रहा है,

1) स्थानीय होस्ट: 8093/plejson/दुकान/उपयोगकर्ता < - --This लिंक सभी उपयोगकर्ता विवरण प्रदर्शित करेगा
2) स्थानीय होस्ट: 8093/plejson/दुकान/उपयोगकर्ता/11 < ---- अगर मैं लिंक साधन में 11 का उपयोग करें, यह विशेष उपयोगकर्ता अब मैं प्रदर्शित करेगा 11 विवरण

आईडी और नाम दोनों का उपयोग करना चाहते हैं

लोकलहोस्ट: 80 9 3/plejson/shop/user/11/raju < ----------------- इस की तरह इसका मतलब है कि हम इसमें से किसी एक का उपयोग कर सकते हैं कृपया मेरी मदद करें .....

+0

कृपया उत्तर और कोड नमूना के स्वरूपण को सही करें। –

+0

कृपया वर्णन करें कि यह कोड प्रश्नकर्ता की सहायता कैसे करता है। धन्यवाद। –

+0

http://www.programming-free.com/2014/03/spring-mvc-40-restful-web-service-json.html .................. इस लिंक यू मिल जाएगा के माध्यम से ..go ... आप – user5409646

15

@RequestBody: एक विधि पैरामीटर को इंगित करने वाला एनोटेशन HTTP अनुरोध के शरीर से बंधे होना चाहिए।

उदाहरण के लिए:

@RequestMapping(path = "/something", method = RequestMethod.PUT) 
public void handle(@RequestBody String body, Writer writer) throws IOException { 
    writer.write(body); 
} 

@ResponseBody एनोटेशन एक विधि पर रखा जा सकता है और पता चलता है कि वापसी प्रकार HTTP प्रतिक्रिया शरीर के लिए सीधे लिखा जाना चाहिए (और एक मॉडल में नहीं रखा, या के रूप में व्याख्या एक दृश्य नाम)।

उदाहरण के लिए:

@RequestMapping(path = "/something", method = RequestMethod.PUT) 
public @ResponseBody String helloWorld() { 
    return "Hello World"; 
} 

वैकल्पिक रूप से, हम @Controller एनोटेशन के स्थान पर @RestController एनोटेशन का उपयोग कर सकते हैं। यह @ResponseBody का उपयोग करने की आवश्यकता को हटा देगा।

for more details

0

नीचे एक जावा नियंत्रक में एक विधि का एक उदाहरण है।

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public HttpStatus something(@RequestBody MyModel myModel) 
{ 
    return HttpStatus.OK; 
} 

@RequestBody एनोटेशन उपयोग करके आप अपने मूल्यों मॉडल आप किसी भी विशिष्ट कॉल से निपटने के लिए अपने सिस्टम में बनाया के साथ मैप किया जाएगा। @ResponseBody का उपयोग करके आप उस स्थान पर वापस कुछ भी भेज सकते हैं जहां से अनुरोध उत्पन्न हुआ था। दोनों चीजों को बिना किसी कस्टम पार्सर आदि लिखने के आसानी से मैप किया जाएगा