2014-05-11 11 views
8

के साथ जैक्सन का उपयोग कर JSON सरणी में जावा सूची अब मैं जावा सूची ऑब्जेक्ट को JSON सरणी में परिवर्तित करने और यूटीएफ -8 तारों को बदलने के लिए संघर्ष करने की कोशिश कर रहा हूं। मैंने सभी अनुवर्ती कोशिश की है, लेकिन उनमें से कोई भी काम नहीं करता है।जैक्सन यूटीएफ -8 एन्कोडिंग

सेटिंग्स।

response.setContentType("application/json"); 

PrintWriter out = response.getWriter(); 
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); 
final ObjectMapper mapper = new ObjectMapper(); 

टेस्ट # 1।

// Using writeValueAsString 
String json = ow.writeValueAsString(list2); 

टेस्ट # 2।

// Using Bytes 
final byte[] data = mapper.writeValueAsBytes(list2); 
String json = new String(data, "UTF-8"); 

टेस्ट # 3।

// Using ByteArrayOutputStream with new String() 
final OutputStream os = new ByteArrayOutputStream(); 
mapper.writeValue(os, list2); 
final byte[] data = ((ByteArrayOutputStream) os).toByteArray(); 
String json = new String(data, "UTF-8"); 

टेस्ट # 4।

// Using ByteArrayOutputStream 
final OutputStream os = new ByteArrayOutputStream(); 
mapper.writeValue(os, list2); 
String json = ((ByteArrayOutputStream) os).toString("UTF-8"); 

टेस्ट # 5।

// Using writeValueAsString 
String json = mapper.writeValueAsString(list2); 

टेस्ट # 6।

// Using writeValue 
mapper.writeValue(out, list2); 

जैसा कि मैंने कहा, उपर्युक्त कार्यों में से कोई भी नहीं। सभी "???" जैसे वर्ण प्रदर्शित करते हैं। मैं आपकी मदद की सराहना करता हूं। मैं ग्राहकों को JSON प्रतिक्रिया भेजने के लिए सर्वलेट का उपयोग कर रहा हूं।

यह समस्या तब होती है जब मैं java.util.List ऑब्जेक्ट लिखता हूं। यदि मैं एकल डेटा ऑब्जेक्ट लिखता हूं, उदा। उदाहरण के नीचे ग्राहक वस्तु, तो कोई नहीं है ??? पात्र, और यूटीएफ -8 निम्नलिखित कोड के साथ काम कर रहा है।

PrintWriter out = response.getWriter(); 
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); 
String json = ow.writeValueAsString(customer); 
out.print(json); 
+0

* क्या है List2 *? * ओउ * क्या है? * बाहर * क्या है? – Torino

+0

टेस्ट # 1 शुद्ध जावा तारों के साथ काम करता है। इसमें कोई एन्कोडिंग शामिल नहीं है। यदि टेस्ट # 1 काम नहीं करता है, तो ??? पात्र पहले से ही * list2 * का हिस्सा हैं या वे बाद के चरण में पेश किए गए हैं जो आपके प्रश्न में नहीं दिखाए गए हैं। कृपया अधिक संदर्भ प्रदान करें। आप किस बिंदु पर ??? वर्ण? – Torino

+0

@ टोरिनो मैं उनको जोड़ना भूल गया। मैंने अपनी मूल पोस्ट अपडेट की है। मुझे बताने के लिए धन्यवाद! – Mingoo

उत्तर

13

जवाब बहुत आसान था। आपको प्रतिक्रिया में यूटीएफ -8 वर्णसेट एन्कोडिंग निर्दिष्ट करने की आवश्यकता है .setContent टाइप भी।

response.setContentType("application/json;charset=UTF-8"); 

फिर, उपर्युक्त कोड में से कई सही तरीके से काम करेंगे। मैं अपना प्रश्न इस तरह छोड़ दूंगा, क्योंकि यह आपको ग्राहकों को JSON लिखने के कई तरीके दिखाएगा।

1
नियंत्रक में

RequestMapping पर:

@RequestMapping(value = "/user/get/sth", 
       method = RequestMethod.GET, 
       produces = { "application/json;**charset=UTF-8**" }) 
संबंधित मुद्दे