I made a small Rest webservice using Jersey 1.11. When i call the url that returns Json, there are problems with the character encoding for non english characters. The corresponding url for Xml ("test.xml" makes it utf-8 in the starting xml-tag.
How can I make the url "test.json" return utf-8 encoded response?
Here's the code for the service:
@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(); } }
This is the pojo that the service uses:
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() {} }
Jersey should always produce utf-8 by default, sounds like the problem is that your client isn't interpreting it correctly (the xml declaration doesn't "make" it utf-8, just tells the client how to parse it).
What client are you seeing these problems with?
Valid JSON is only supposed to be Unicode (utf-8/16/32); parsers should be able to detect the encoding automatically (of course, some don't), so there is no encoding declaration in JSON.
You can add it to the Content-Type
like so:
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With