场景还原
在配置框架的统一异常处理时,由于系统前后端分离,确定以JSON的形式返回数据到前端,但是中文会出现乱码的情况。
/**
* 只处理IntegratedExceptionHandlerGroup标记的controller
*/
@RestControllerAdvice(annotations = {IntegratedExceptionHandlerGroup.class})
public class ServerExceptionHandler {
/**
* xx异常统一处理
* @param integratedException xx业务异常
* @return 返回前端接收JSON串
*/
@ExceptionHandler(IntegratedServerException.class)
public String handler(IntegratedServerException integratedException) {
return JSON.toJSONString(integratedException.getResult());
}
}
问题定位
通过查看返回体,发现问题出在Response的Content-Type默认是ISO-8859-1,所以只要想办法指定到UTF-8应该就可解决
解决办法
修改Content-Type的办法理论上有很多,我这里不便做全局修改,所以提一个便捷的局部指定Content-Type修改方法。
/**
* 只处理IntegratedExceptionHandlerGroup标记的controller
*/
@Slf4j
@RestControllerAdvice(annotations = {IntegratedExceptionHandlerGroup.class})
public class ServerExceptionHandler {
/**
* xx业务异常统一处理
* @param integratedException xx业务异常
* @return 返回前端接收JSON串
*/
@ExceptionHandler(IntegratedServerException.class)
public void handler(IntegratedServerException integratedException, HttpServletResponse response) {
try{
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(integratedException.getResult()));
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
}