Arrays 使用Jackson和UTF-8编码的Java列表到JSON数组

Arrays 使用Jackson和UTF-8编码的Java列表到JSON数组,arrays,json,list,utf-8,jackson,Arrays,Json,List,Utf 8,Jackson,现在,我正在尝试将Java列表对象转换为JSON数组,并努力转换UTF-8字符串。我尝试了以下所有方法,但没有一种有效 设置 response.setContentType("application/json"); PrintWriter out = response.getWriter(); ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); final ObjectMapper mapper =

现在,我正在尝试将Java列表对象转换为JSON数组,并努力转换UTF-8字符串。我尝试了以下所有方法,但没有一种有效

设置

response.setContentType("application/json");

PrintWriter out = response.getWriter();
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
final ObjectMapper mapper = new ObjectMapper();
测试#1

测试#2

测试#3

测试#4

测试#5

测试#6

正如我所说的,以上这些都不起作用。所有显示字符,如“?”。我感谢你的帮助。我正在使用Servlet向客户端发送JSON响应

这个问题只有在我编写java.util.List对象时才会发生。如果我只写一个数据对象,例如下面示例中的customer对象,那么没有???字符,UTF-8正在使用以下代码

PrintWriter out = response.getWriter();
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(customer);
out.print(json);

答案很简单。您还需要在response.setContentType中指定UTF-8字符集编码

response.setContentType("application/json;charset=UTF-8");

然后,上面的许多代码将正常工作。我将保留我的问题,因为它将向您展示几种将JSON写入客户端的方法。

关于Controller中的RequestMapping:

@RequestMapping(value = "/user/get/sth",
                method = RequestMethod.GET,
                produces = { "application/json;**charset=UTF-8**" })

清单2是什么?什么是ow?测试1使用纯Java字符串。不涉及编码。如果测试1不起作用,那么???字符已经是列表2的一部分,或者它们是在稍后阶段引入的,在您的问题中没有显示。请提供更多上下文。你在哪一点看到了???角色?@都灵我忘了添加这些。我已经更新了我原来的帖子。谢谢你让我知道@关于list2对象中的字符,我已经测试过了,字符很好(不是???),这意味着在JSON写入过程中字符会被破坏。如果我只写一个对象,那么就没有问题了。只有在尝试使用Jackson编写java.util.List时才会发生这种情况。
// Using ByteArrayOutputStream
final OutputStream os = new ByteArrayOutputStream();
mapper.writeValue(os, list2);
String json = ((ByteArrayOutputStream) os).toString("UTF-8");
// Using writeValueAsString
String json = mapper.writeValueAsString(list2);
// Using writeValue
mapper.writeValue(out, list2);
PrintWriter out = response.getWriter();
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(customer);
out.print(json);
response.setContentType("application/json;charset=UTF-8");
@RequestMapping(value = "/user/get/sth",
                method = RequestMethod.GET,
                produces = { "application/json;**charset=UTF-8**" })