我真的被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编组测试对象不会。
有什么想法吗?我有点失落。
答案 0 :(得分:3)
很抱歉,但我必须解决这个问题。解决方案是使用最新的稳定MOXy库2.5.2。这解决了我的问题,如魅力(幸运的我)。好吧,就在几分钟前我问过这个问题,但是确保我是在desparatley寻找解决方案之后发布的,因为过去几天。 我唯一的提示是https://bugs.eclipse.org/bugs/show_bug.cgi?id=419072#attach_236300,但这只是提到了控制字符的奇怪行为。
希望这有助于任何遇到同样麻烦的人。