记一次@ResponseBody注解返回中文乱码的问题
Bug场景
前端AJax
$.ajax({
url: '$!{request.getContextPath()}/XX/save.do',
type: 'post',
dataType: 'json',
data: $("#msg-form").serialize(),
success: function (data) {
if (data.success == "true" || data.success == true) {
Toast.show({
template: "添加成功",
second: 1000,
callback: function () {
window.parent.location.reload();
}
});
}else {
$("#submitButton").removeAttr("disabled");
Toast.show({
template: data.msg,
});
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#submitButton").removeAttr("disabled");
Toast.show("[服务器异常]" + XMLHttpRequest.status);
}
});
后端接口
@ResponseBody
@RequestMapping(value = "/save.do")
public void savePushJob(PushJob pushJob, HttpServletRequest request, HttpServletResponse response){
String jsonFmt = "{\"success\":%s,\"msg\":\"%s\"}";
String json = "";
try{
//校验落地页有效性
String msg = this.checkParams(pushJob);
if(StringUtil.isNotBlank(msg)){
json = String.format(jsonFmt, false, msg);
ResponseJsonUtil.writeJson2Response(json, request, response);
return;
}
json = String.format(jsonFmt, true, "");
ResponseJsonUtil.writeJson2Response(json, request, response);
return;
}catch (Exception e){
e.printStackTrace();
json = String.format(jsonFmt, false, "系统异常");
ResponseJsonUtil.writeJson2Response(json, request, response);
return;
}
}
//code 2
/**
* 将JSON字符串写到输出流
* @author zhaoyang
* @date 2015年5月6日 上午8:28:44
* @param json
* @param request
* @param response
*/
public static void writeJson2Response(String json,HttpServletRequest request,HttpServletResponse response){
String cb=request.getParameter("jsoncallback");
if (!StringUtils.isEmpty(cb)) {
response.setContentType("text/javascript");
json = cb + "(" + json + ");";
} else {
response.setContentType("text/json");
}
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
try {
response.getWriter().write(json);
} catch (IOException e) {
log.error("将JSON字符串写到输出流时出错", e);
}
}
描叙
-如上图code,接口返回中文的错误提示时,ajax直接报错进入 error ,
之前,接口有直接返回一个String,包含中文则是乱码
return JsonUtil.toJson("success");
code 片段 2
/**
* 将一个对象编码为json字符串
*
* @param obj ,if null return "null"
* 要编码的字符串
* @return json字符串
* @throws RuntimeException
* 若对象不能被编码为json串
*/
public static String toJson(Object obj) {
if (obj == null) {
return null;
}
try {
return MAPPER.writeValueAsString(obj);
} catch (Exception e) {
throw new RuntimeException("error encode json for " + obj, e);
}
}
解决方法
方法1.移除@ResponseBody
方法2 @RequestMapping 添加 produces
@RequestMapping(value = "/save.do",produces = "application/json;charset=utf-8")
其他方法
这里是没有验证的 https://blog.csdn.net/zknxx/article/details/52423608
扩展
1.@ResponseBody 的作用
2.@ResponseBody 为什么未出现中文乱码
记一次@ResponseBody注解返回中文乱码的问题的更多相关文章
- SpringMVC中 解决@ResponseBody注解返回中文乱码
问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter ...
- springmvc 解决@ResponseBody注解返回中文乱码
使用messageConverters <bean class="org.springframework.web.servlet.mvc.method.annotation.Reque ...
- @ResponseBody注解返回中文乱码
第一种方法: @RequestMapping(value = "testPersonalValidtor",produces = "application/json;ch ...
- SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文件中使用<mvc:annotation-driven />去自动注册DefaultAnnota ...
- spring mvc 返回乱码SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html 先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文 ...
- spring 3.0 @ResponseBody注解返回中文问号乱码解决办法
前几天给公司做项目,很久没接触java项目的我,遇到了一个问题,就是我在利用异步到控制器中查询,然后返回jaon字符串到前台,字符串中包含中文,于是我直接用了@ResponseBody注解,来返回到前 ...
- 解决spring-mvc @responseBody注解返回json 乱码问题
在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题.现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会 ...
- 解决@ResponseBody注解返回的json中文乱码问题
1. 简介 主要解决@ResponseBody注解返回的json中文乱码问题. 2.解决方案 2.1mvc加上注解(推荐此方法) 在mvc配置文件中假如下面配置(写在 <mvc:annotati ...
- Springboot @ResponseBody返回中文乱码
最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...
随机推荐
- day03: copy的总结(20170215)
import copynames = ["88xiaoming","liuhai","杨东","liuhai",&quo ...
- Selenium RemoteWebDriver 利用CDP修改User-Agent
地球人都知道,如果使用selenium时要修改user-agent可以在启动浏览器时添加配置项,如chromeOptions.addArguments("user-agent=xxx&quo ...
- 浙工大新生赛莫队处理+区间DP+KMP+分析题
题目描述 读入一个长度为n的整数数列a1,a2,…,an,以及一个整数K. q组询问. 每组询问包含一个二元组(l, r), 其中1≤l≤r≤ n, 求所有满足以下条件的二元组(l2, r2)的数目: ...
- 11_ArrayList集合的方法
class Program { static void Main(string[] args) { //数组:长度不可变,类型单一 //ArrayList集合:长度可以任意改变,类型可以不单一 //创 ...
- Spark SQL源码解析(五)SparkPlan准备和执行阶段
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...
- 《HelloGitHub》第 50 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...
- [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)
引言 本系列适合0基础的人员,因为我们就是从0开始的,此系列记录我们步入微信营销企划并进行开发的一些经验分享,望与君共勉!作为刚刚踏入微信队伍中的新人的我们,如果有什么不对的地方,还望不吝赐教. 在开 ...
- 北醒激光模块TFmini——STM32驱动程序(STM32F103C8T6)
背景:该激光模块属于精度比较高的激光测距模块,使用方便. 代码地址:https://github.com/W-yt/YuTian_Pro/tree/master/TFMini_Driver 平台: 硬 ...
- [Python3]踩坑实录-优化技巧1
选择合适的数据结构 考虑不同的应用场景,应选择不同的数据结构 比如在查找多于插入的场景中,考虑字典Dict是不是更适合; 因为在Python3中, 字典Dict 通过hash把key映射到hash t ...
- jchdl - RTL实例 - AndReg
https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A 输入两组线相与,结果输出到寄存器. 参考链接 https://github.com/wjcd ...