2012-09-18 19 views
10

के साथ स्ट्रिंग के जेएसओएन प्रस्तुति को लौटाना मैं जर्सी के साथ एक आरईएसटी-वेबसाइट सेवा स्थापित करने जा रहा हूं। फिलहाल मैं स्ट्रिंग या JSON में अन्य मान प्रकारों के सही प्रतिनिधित्व के बारे में थोड़ा उलझन में हूं।जर्सी

@GET 
@Path("user") 
@Produces(MediaType.APPLICATION_JSON) 
public User user() { 
    return new User("reini", "admin"); 
} 

एक ब्राउज़र में इस विधि कॉलिंग ऐसे ही एक "अच्छा" JSON स्ट्रिंग प्रदर्शित करेगा:

{"name":"reini","role":"admin"} 

मेरी दूसरी विधि इस प्रकार है: यहाँ दो स्निपेट होते हैं

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
} 

ब्राउजर में उस विधि को कॉल करने से किसी भी JSON-Stuff (घुंघराले ब्रेसेस इत्यादि) के बिना एक शुद्ध स्ट्रिंग प्रदर्शित होगी:

Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012 

मैं इस सेवा को डोजो टूलकिट के साथ उपभोग करना चाहता हूं। समस्या यह है कि जैसे ही मैंने सेट किया है, मुझे दूसरी विधि के लिए एक मिलता है [हैंडलएएस: "जेसन"] - ध्वज। यह मुझे एक त्रुटि फेंकता है "सिंटेक्स त्रुटि: अप्रत्याशित टोकन एच" जहां "एच" लौटाई गई स्ट्रिंग का पहला अक्षर है।

तो: स्ट्रिंग्स और अन्य मूल्य प्रकारों का सही जेसन प्रतिनिधित्व क्या है और इन्हें बनाने के लिए मेरी विधि के लिए मुझे कौन सी टिप्पणियां सेट करनी हैं?

उत्तर

5

आपको DTO परिभाषित करना चाहिए और उसमें अपना String डालना चाहिए। तो आप एक स्ट्रिंग के रूप में एक HelloResp कक्षा को हवाना करेंगे। आपकी विधि में उस विशेषता को पॉप्युलेट करें और वापस आएं।

आप यह Tutorial देख सकते हैं। एक और tutorial

फ़ायरफ़ॉक्स त्रुटि नहीं दिखा रहा है क्योंकि, यह आपकी प्रतिक्रिया को संसाधित नहीं कर रहा है। सेवा द्वारा जो कुछ भी वापस किया जाता है प्रदर्शित होता है। टूलकिट लेकिन एक JSON के रूप में प्रतिक्रिया प्रसंस्करण शुरू होता है, लेकिन एक मान्य JSON नहीं था (JSON { साथ शुरू होता है)

+0

यह हर ऑपरेशन के लिए एक डीटीओ बनाने के लिए या प्रत्येक प्रकार मैं उपयोग करना चाहते हैं के लिए एक डीटीओ बनाने के लिए बेहतर है:

बस एक सादा पाठ (MediaType.TEXT_PLAIN) के रूप में इसे वापस? – Reini

+0

प्रत्येक प्रकार के लिए डीटीओ – SiMet

+1

"JSON प्रारंभ होता है {" - गलत। Http://json.org के मुताबिक भी एक उद्धृत स्ट्रिंग अक्षर वैध JSON है, और जर्सी को एक स्ट्रिंग को JSON स्ट्रिंग के रूप में सही ढंग से क्रमबद्ध करने का समर्थन करना चाहिए। – ddumont

2

तुम भी रूप में इसे वापस कर सकते हैं:

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "\"Hello " + name + ", it is " + new Date()+'"'; 
} 

लेकिन यह मेरे लिए बहुत ही अजीब लग रही है।

प्रत्येक ऑब्जेक्ट के लिए डीटीओ बनाना भी एक स्ट्रिंग के लिए अजीब लग रहा है।

क्या कोई बेहतर विकल्प है?

+0

क्या आप कृपया बता सकते हैं कि आप दोहरे उद्धरण का उपयोग क्यों कर रहे हैं? ("") बस के बजाय: "कुछ" लौटाएं? मुझे इसके साथ कोई समस्या है और यह समझ में नहीं आता कि क्यों एक नियमित स्ट्रिंग एक वैध जेसन प्रतिक्रिया में परिवर्तित नहीं हो रही है – user1386966

+0

कारण यह है कि यह मीडियाटाइप एप्लिकेशन जेसन लौटाता है और आप कुछ जेसन को "{\" एक \ ": 1} के रूप में मैन्युअल रूप से वापस कर सकते हैं "जो एक स्ट्रिंग नहीं है। स्वीकृत उत्तर देखें – SiMet

1

यदि आप एक स्ट्रिंग लौट रहे हैं तो आप इसे एक प्रकार JSON के रूप में परिभाषित क्यों करते हैं?

@GET 
@Path("hello/{name}") 
@Produces(MediaType.TEXT_PLAIN) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
} 
संबंधित मुद्दे