दिलचस्प पोस्ट
MySQL, एक क्वेरी के साथ कई तालिकाओं को अपडेट करें एक स्थान के अक्षांश और देशांतर को प्राप्त करें dbpedia .NET 4.0 और .NET 4.5 के बीच अंतर उच्च स्तर में .NET आईओएस 8 रोटेशन मेथड अपेशन – पश्चगामी संगतता वर्चुअल कार्य और प्रदर्शन – सी ++ घटक के लिए भुगतान किए बिना मैं .NET में RTF (रिच टेक्स्ट) को HTML कैसे रूपांतरित कर सकता हूं? मैं एक AJAX अनुरोध से एक मूल्य कैसे वापस कर सकता हूँ? Windows XP पर जावा अधिकतम मेमोरी MySQL में एक संचयी राशि कॉलम बनाएँ मेरी शेबांग को छूने न दें स्ट्रिंग के लिए पायथन प्रारूप समयबद्धता मैं MySQL के साथ asp.net MVC 2 सेटअप कैसे करूँ? जेएसीएबी वंशानुक्रम, मार्शल क्लास के उप-कक्षा में असंबद्ध d3.js रासायनिक ट्यूब बार चार्ट परावर्तन के साथ स्थैतिक संपत्ति कैसे प्राप्त करें

वसंत MVC नियंत्रक में JSON पैरामीटर

मेरे पास है

@RequestMapping(method = RequestMethod.GET) @ResponseBody SessionInfo register(UserProfile profileJson){ ... } 

मैं इस तरीके से प्रोफ़ाइल पास करता हूं:

 http://server/url?profileJson={"email": "mymail@gmail.com"} 

लेकिन मेरी प्रोफाइल जैसन ऑब्जेक्ट में सभी रिक्त फ़ील्ड हैं। वसंत को अपना जेसन बनाने के लिए मुझे क्या करना चाहिए?

Solutions Collecting From Web of "वसंत MVC नियंत्रक में JSON पैरामीटर"

यह एक कस्टम संपादक के साथ किया जा सकता है, जो JSON को एक UserProfile ऑब्जेक्ट में कनवर्ट करता है:

 public class UserProfileEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { ObjectMapper mapper = new ObjectMapper(); UserProfile value = null; try { value = new UserProfile(); JsonNode root = mapper.readTree(text); value.setEmail(root.path("email").asText()); } catch (IOException e) { // handle error } setValue(value); } } 

यह नियंत्रक वर्ग में संपादक को दर्ज करने के लिए है:

 @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(UserProfile.class, new UserProfileEditor()); } 

और JSONP पैरामीटर को खोलने के लिए, संपादक का उपयोग कैसे करें:

 @RequestMapping(value = "/jsonp", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) @ResponseBody SessionInfo register(@RequestParam("profileJson") UserProfile profileJson){ ... } 

इसका समाधान इतना आसान और सरल है कि यह व्यावहारिक रूप से आपको हंसी देगा, लेकिन इससे पहले कि मैं इसे भी प्राप्त कर सकूं, पहले मुझे ज़ोर देना चाहिये कि कोई भी स्वाभिमान जावा डेवलपर कभी नहीं होगा, और मेरा मतलब है कि जैक्सन उच्च का उपयोग किए बिना कभी भी JSON के साथ काम करना – प्रदर्शन JSON पुस्तकालय

जैक्सन केवल जावा डेवेलपर्स के लिए एक काम घोड़ा और defacto JSON पुस्तकालय नहीं है, लेकिन यह एपीआई कॉल्स का एक पूरा सूट भी प्रदान करता है जो जावा के साथ JSON एकीकरण को बनाता है (आप जैक्सन को http: //jackson.codehaus पर डाउनलोड कर सकते हैं । संगठन / )

अब जवाब के लिए यह मानते हुए कि आपके पास एक UserProfile pojo है जो ऐसा कुछ दिखता है:

 public class UserProfile { private String email; // etc... public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } // more getters and setters... } 

… तो {"email": "mymail@gmail.com"} के JSON मान के साथ एक GET पैरामीटर नाम "profileJson" कनवर्ट करने के लिए आपकी स्प्रिंग MVC विधि आपके नियंत्रक में दिखाई देगी:

 import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; // this is your lifesaver right here //.. your controller class, blah blah blah @RequestMapping(value="/register", method = RequestMethod.GET) public SessionInfo register(@RequestParam("profileJson") String profileJson) throws JsonMappingException, JsonParseException, IOException { // now simply convert your JSON string into your UserProfile POJO // using Jackson's ObjectMapper.readValue() method, whose first // parameter your JSON parameter as String, and the second // parameter is the POJO class. UserProfile profile = new ObjectMapper().readValue(profileJson, UserProfile.class); System.out.println(profile.getEmail()); // rest of your code goes here. } 

बैम! हो गया। मैं आपको जैक्सन एपीआई के थोक देखने के लिए प्रोत्साहित करता हूँ, क्योंकि मैंने कहा, यह एक लाइफसेवर है। उदाहरण के लिए, क्या आप अपने नियंत्रक से JSON लौट रहे हैं? यदि हां, तो आपको केवल अपने lib में JSON शामिल है, और आपके पीओओओ वापस लौटाएंगे और जैक्सन स्वतः इसे JSON में परिवर्तित करेगा। आप उस से ज्यादा आसान नहीं हो सकते चीयर्स! 🙂

यह मेरे तात्कालिक मुद्दे को हल करता है, लेकिन मैं अभी भी उत्सुक हूं कि आप AJAX कॉल के जरिए कई JSON ऑब्जेक्ट में कैसे पारित कर सकते हैं।

ऐसा करने का सबसे अच्छा तरीका है एक आवरण वस्तु जिसके पास दो (या एकाधिक) ऑब्जेक्ट हैं जिन्हें आप पास करना चाहते हैं फिर आप अपने JSON ऑब्जेक्ट को दो वस्तुओं की एक सरणी के रूप में बनाते हैं I

 [ { "name" : "object1", "prop1" : "foo", "prop2" : "bar" }, { "name" : "object2", "prop1" : "hello", "prop2" : "world" } ] 

फिर अपने नियंत्रक पद्धति में आप अनुरोध निकाय को एक ही वस्तु के रूप में प्राप्त करते हैं और दो निहित वस्तुओं को निकाल सकते हैं। अर्थात:

 @RequestMapping(value="/handlePost", method = RequestMethod.POST, consumes = { "application/json" }) public void doPost(@RequestBody WrapperObject wrapperObj) { Object obj1 = wrapperObj.getObj1; Object obj2 = wrapperObj.getObj2; //Do what you want with the objects... } 

Wrapper ऑब्जेक्ट कुछ ऐसा दिखेगा …

 public class WrapperObject { private Object obj1; private Object obj2; public Object getObj1() { return obj1; } public void setObj1(Object obj1) { this.obj1 = obj1; } public Object getObj2() { return obj2; } public void setObj2(Object obj2) { this.obj2 = obj2; } } 

इस परम से पहले बस @RequestBody एनोटेशन जोड़ें