问题描述
正常接口的中文返回是正确的
而只要发生异常处理,就会使用全局统一异常处理,输出包含中文字符的json字符串,发现,全都变成了问号??????
/**
* 统一异常处理
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public void exceptionHandler(Throwable error, HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
writer.write("{\"code\":1,\"data\":null,\"msg\":\"请勿重复订阅\"}");
}
}
输出如下
{"code":1,"data":null,"msg":"??????"}
问题解决
设置响应头的内容字符编码即可
// 设置响应编码
response.setContentType("application/json;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write("{\"code\":1,\"data\":null,\"msg\":\"请勿重复订阅\"}");
输出如下
{"code":1,"data":null,"msg":"请勿重复订阅"}