MOXy无法使用application / json正确编组UTF-8字符

时间:2015-02-23 16:49:08

标签: json encoding utf-8 jaxb moxy

我真的被Eclipselink MOXy 2.5.1困住了,没有给我正确编码的亚洲字符(或其他字符,例如德语变形金刚äöü)。

我的代码:

@GET
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Path("/test")
public Response getJson() throws IOException{
    return Response.ok(new Test()).build();
}

@GET
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Path("/test2")
public Response getKey() throws IOException{
    return Response.ok(new Test().toString()).build();
}

Test类看起来像:

@XmlRootElement
class Test{

   public String key;

   public Test() throws IOException {
       key = FileUtils.readFileToString(new File("e:\\utf8.txt"), "UTF-8");
   }

   public String toString() {
       return key;
   }
}

属性“key”初始化用于测试目的只有一个字符串,我从UTF-8编码的文件读取而不包含BOM

アナログカメラは

当我使用客户端调用两个资源时:

    Client client = ClientBuilder.newClient();
    WebTarget webTarget = client.target("http://127.0.0.1/rest").path("/test");
    WebTarget webTarget2 = client.target("http://127.0.0.1/rest").path("/test2");

    Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON_TYPE);
    invocationBuilder.header(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
    Response response = invocationBuilder.get();
    System.out.println("Result /test: " + response.readEntity(String.class));

    invocationBuilder = webTarget2.request(MediaType.APPLICATION_JSON_TYPE);
    invocationBuilder.header(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
    response = invocationBuilder.get();
    System.out.println("Result /test2: " + response.readEntity(String.class));

我得到以下结果:

Result /test: {"key":"��?��o"}
Result /test2: アナログカメラは

奇怪的是,当我在/ test2中编组测试对象的toString()方法时,会返回正确编码的字符,用/ test编组测试对象不会。

有什么想法吗?我有点失落。

1 个答案:

答案 0 :(得分:3)

很抱歉,但我必须解决这个问题。解决方案是使用最新的稳定MOXy库2.5.2。这解决了我的问题,如魅力(幸运的我)。好吧,就在几分钟前我问过这个问题,但是确保我是在desparatley寻找解决方案之后发布的,因为过去几天。 我唯一的提示是https://bugs.eclipse.org/bugs/show_bug.cgi?id=419072#attach_236300,但这只是提到了控制字符的奇怪行为。

希望这有助于任何遇到同样麻烦的人。