2012-02-20 15 views
41

मैंने जर्सी 1.11 का उपयोग करके एक छोटा सा आराम webservice बनाया। जब मैं उस यूआरएल को कॉल करता हूं जो जेसन लौटाता है, तो गैर अंग्रेजी अक्षरों के लिए वर्ण एन्कोडिंग में समस्याएं होती हैं। Xml के लिए संबंधित URL ("test.xml" यह utf-8 शुरू करने एक्सएमएल टैग में बनाता है।जर्सी वेब सेवा जेसन यूटीएफ -8 एन्कोडिंग

मैं कैसे यूआरएल "test.json" वापसी utf-8 इनकोडिंग प्रतिक्रिया कर सकते हैं?

यहाँ सेवा के लिए कोड:

@Stateless 
@Path("/") 
public class RestTest { 
    @EJB 
    private MyDao myDao; 

    @Path("test.xml/") 
    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public List<Profile> getProfiles() {  
     return myDao.getProfilesForWeb(); 
    } 

    @Path("test.json/") 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<Profile> getProfilesAsJson() { 
     return myDao.getProfilesForWeb(); 
    } 
} 

यह POJO कि सेवा का उपयोग करता है:

package se.kc.mimee.profile.model; 

@XmlRootElement 
public class Profile { 
    public int id; 
    public String name; 

    public Profile(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public Profile() {} 

} 
+0

संभव डुप्लिकेट [? JAX-रुपये के साथ चारसेट स्थापित करने के लिए कैसे] (http://stackoverflow.com/questions/3431996/how -to-set-the-charset-with-jax-rs) – rds

उत्तर

87

जर्सी हमेशा प्रस्तुत करना चाहिए utf-8 डिफ़ॉल्ट रूप से, लगता है समस्या की तरह है कि आपके ग्राहक नहीं है व्याख्या यह सही ढंग से (एक्सएमएल घोषणा इसे utf-8 "नहीं" बनाती है, बस क्लाइंट को यह बताती है कि इसे कैसे पार्स करें)।

आप इन समस्याओं को किस ग्राहक से देख रहे हैं?

मान्य JSON केवल यूनिकोड (utf-8/16/32) होना चाहिए; पार्सर्स स्वचालित रूप से एन्कोडिंग का पता लगाने में सक्षम होना चाहिए (बेशक, कुछ नहीं करते हैं), इसलिए JSON में कोई एन्कोडिंग घोषणा नहीं है।

तुम इतनी तरह Content-Type में जोड़ सकते हैं:

@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
+2

मुझे अपने क्रोम ब्राउज़र और Google के बाकी ग्राहक दोनों के साथ समस्या दिखाई दे रही थी, लेकिन आपका सुझाव समस्या को हल करता है :) – Jojje

+1

मेरे मामले में, जर्सी 1.2 के साथ भी समस्या को हल करता है, धन्यवाद –

+1

2015 और मुझे अभी भी समस्या है –

5

तो हर संसाधन के चारसेट जोड़ने के लिए एक विकल्प है, शायद this question का जवाब, से पता चलता है जो एक डिफ़ॉल्ट चारसेट लागू करने के लिए कैसे नहीं है, सहायक हो सकता है।

3

responseMessage बीन कक्षा है जिसमें हम प्रतिक्रिया में UTF-8 charset भेज सकते हैं।

return Response.ok(responseMessage).header("Content-Type", "application/json;charset=UTF-8").build(); 
3

@Produces अगर (MediaType.APPLICATION_JSON + "; charset = utf-8") समारोह है, तो कोशिश नहीं करता:

@Produces ("application/json; charset = utf-8")

सिद्धांत रूप में यह एक ही है, लेकिन पहला विकल्प मेरे लिए काम नहीं किया

0

आप भी इस कोशिश कर सकते हैं:

return Response.ok(responseMessage, "application/json;charset=UTF-8").build(); 
0

जर्सी छोटी है, जब सामग्री-प्रकार एप्लिकेशन/जेसन का उपयोग किया जाता है, तो यह यूनिकोड जेएसओएन एन्कोडिंग को स्वचालित रूप से नहीं मानता है, लेकिन यह अनुरोध करता है कि अनुरोध सर्वर को जो भी रनटाइम प्लेटफ़ॉर्म एन्कोडिंग आपके सर्वर द्वारा उपयोग किया जाता है। प्रतिक्रिया शरीर क्रमिकरण के लिए भी लागू होता है।

स्पष्ट रूप से UTF-8 अक्षरसेट निर्दिष्ट आपका क्लाइंट की जरूरत:

Content-Type: application/json;charset=utf-8 
की
संबंधित मुद्दे