// 设置响应内容类型为 JSON response.setContentType("application/json;character=UTF-8"); // 设置响应内容 String json = new ObjectMapper().writeValueAsString(Result.loginError("请先登录")); response.getWriter().write(json);为什么传递数据会乱码
时间: 2024-02-06 09:02:23 浏览: 144
在这段代码中,设置响应内容类型为 JSON 的时候,使用了 `response.setContentType("application/json;character=UTF-8");` 来指定响应内容类型为 JSON,同时设置了字符编码为 UTF-8。但是,在将 Java 对象序列化成 JSON 字符串的时候,如果 Java 对象中包含了非 ASCII 字符,比如中文、日文等字符,那么就需要使用 UTF-8 编码来进行编码,否则就会出现乱码问题。
在这段代码中,使用了 `ObjectMapper().writeValueAsString()` 方法将 Java 对象转换成 JSON 字符串,但是该方法默认使用的编码方式是 ISO-8859-1,而不是 UTF-8。因此,在将 JSON 字符串写入响应输出流的时候,就会出现乱码问题。
为了解决这个问题,可以将 `ObjectMapper().writeValueAsString()` 方法的返回值转换成字节数组,然后使用 `new String(byte[], Charset)` 方法将字节数组转换成字符串,并指定编码为 UTF-8。修改后的代码如下:
```
// 设置响应内容类型为 JSON
response.setContentType("application/json;charset=UTF-8");
// 设置响应内容
String json = new ObjectMapper().writeValueAsString(Result.loginError("请先登录"));
byte[] bytes = json.getBytes(StandardCharsets.UTF_8);
String result = new String(bytes, StandardCharsets.UTF_8);
response.getWriter().write(result);
```
这样就可以解决传递数据乱码的问题了。
阅读全文