解析期间的 Javax.ws 编码不兼容

标签 java spring web-services utf-8

你好,我在 Spring 中创建了 Rest WS,它有一个方法 getUsersInJSON()

@Path("/json/users")
public class JSONService {

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public List<UserBean> getUserInJSON() {

    List<UserBean> resultList = new ArrayList<UserBean>();

    UserBean user = new UserBean();
    user.setPrimaryName("User1");
    user.setDisplayName("Mieczysław doraźny");
    user.setLatitude(52.237853);
    user.setLongitude(20.98324);
    user.setLastName("Doraźny");

    UserBean user2 = new UserBean();
    user2.setPrimaryName("Bonifacy");
    user2.setDisplayName("Bonek");
    user2.setLastName("Słomiński");
    user2.setLatitude(52.25836);
    user2.setLongitude(20.995728);

    UserBean user3 = new UserBean();
    user3.setPrimaryName("Maciej");
    user3.setDisplayName("Maciej 89");
    user3.setLastName("Grochowski");
    user3.setLatitude(52.244712);
    user3.setLongitude(20.977296);

    UserBean user4 = new UserBean();
    user4.setPrimaryName("田中さん");
    user4.setDisplayName("Tanaka");
    user4.setLastName("邪魔だ");
    user4.setLatitude(52.248022);
    user4.setLongitude(21.019031);

    UserBean user5 = new UserBean();
    user5.setPrimaryName("زبيغنيو مشغول");
    user5.setDisplayName("Arabski arab");
    user5.setLastName("كباب");
    user5.setLatitude(52.223133);
    user5.setLongitude(21.015705);

    UserBean user6 = new UserBean();
    user6.setPrimaryName("Typ");
    user6.setDisplayName("Co za TYP!");
    user6.setLastName("cozatyp");
    user5.setLatitude(52.224776);
    user5.setLongitude(20.989119);

    resultList.add(user2);
    resultList.add(user3);
    resultList.add(user4);
    resultList.add(user5);
    resultList.add(user6);

    return resultList;
}}

当我部署应用程序并输入网址时,我在互联网浏览器(Google Chrome)中得到答案,如下所示:

[{"latitude":52.25836,"longitude":20.995728,"primaryName":"Bonifacy","lastName":"Słomiński","displayName":"Bonek"},
{"latitude":52.244712,"longitude":20.977296,"primaryName":"Maciej","lastName":"Grochowski","displayName":"Maciej 89"},
{"latitude":52.248022,"longitude":21.019031,"primaryName":"田中ã•ã‚“","lastName":"邪魔ã ","displayName":"Tanaka"},
{"latitude":52.224776,"longitude":20.989119,"primaryName":"زبيغنيو مشغول","lastName":"كباب","displayName":"Arabski arab"},
{"latitude":0.0,"longitude":0.0,"primaryName":"Typ","lastName":"cozatyp","displayName":"Co za TYP!"}]

所以我遇到了字符串编码问题,因为: 田中さん 或 巴巴尼亚、尼尼鲁 莫尔、我得到了一些废话,例如:“ç”°ä¸ã•ã‚“和 زشيغنيو مشغول

我尝试使用字符串编码并阅读了一些 Spring 文档,但我没有找到任何对这种情况有用的东西。 所以我的问题是保持 utf8 能力的最佳方法是什么?

效果很好的解决方案是将 @Produces(MediaType.APPLICATION_JSON) 更改为 @Produces(MediaType.APPLICATION_JSON + "; charset=UTF-8")

最佳答案

有一个类似的帖子可用于 JAX-RS 中的字符编码 - How to set the charset with JAX-RS?

关于解析期间的 Javax.ws 编码不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22430221/

相关文章:

java - Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer

hibernate - Spring 3 验证 (JSR-303) @Min

java - KSOAP 元素的排序

java - Android 应用程序的 android.os.NetworkOnMainThreadException

java - 如何在jtoolbar中垂直添加按钮并保持按钮之间的间隙?

java - 如何正确构建包含多行的 xlsx 文件?

java - 自定义 Jersey 错误处理,如何在客户端捕获响应?

java - 创建 Json 字符串

java - Camel 和 Google App Engine 没有 Spring?

C# 调用 java web 服务 : cannot catch FaultException<CustomType>