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注解返回中文乱码的问题的更多相关文章

  1. SpringMVC中 解决@ResponseBody注解返回中文乱码

    问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter ...

  2. springmvc 解决@ResponseBody注解返回中文乱码

    使用messageConverters <bean class="org.springframework.web.servlet.mvc.method.annotation.Reque ...

  3. @ResponseBody注解返回中文乱码

    第一种方法: @RequestMapping(value = "testPersonalValidtor",produces = "application/json;ch ...

  4. SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题

    先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文件中使用<mvc:annotation-driven />去自动注册DefaultAnnota ...

  5. spring mvc 返回乱码SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题

    原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html 先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文 ...

  6. spring 3.0 @ResponseBody注解返回中文问号乱码解决办法

    前几天给公司做项目,很久没接触java项目的我,遇到了一个问题,就是我在利用异步到控制器中查询,然后返回jaon字符串到前台,字符串中包含中文,于是我直接用了@ResponseBody注解,来返回到前 ...

  7. 解决spring-mvc @responseBody注解返回json 乱码问题

    在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题.现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会 ...

  8. 解决@ResponseBody注解返回的json中文乱码问题

    1. 简介 主要解决@ResponseBody注解返回的json中文乱码问题. 2.解决方案 2.1mvc加上注解(推荐此方法) 在mvc配置文件中假如下面配置(写在 <mvc:annotati ...

  9. Springboot @ResponseBody返回中文乱码

    最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...

随机推荐

  1. day03: copy的总结(20170215)

    import copynames = ["88xiaoming","liuhai","杨东","liuhai",&quo ...

  2. Selenium RemoteWebDriver 利用CDP修改User-Agent

    地球人都知道,如果使用selenium时要修改user-agent可以在启动浏览器时添加配置项,如chromeOptions.addArguments("user-agent=xxx&quo ...

  3. 浙工大新生赛莫队处理+区间DP+KMP+分析题

    题目描述 读入一个长度为n的整数数列a1,a2,…,an,以及一个整数K. q组询问. 每组询问包含一个二元组(l, r), 其中1≤l≤r≤ n, 求所有满足以下条件的二元组(l2, r2)的数目: ...

  4. 11_ArrayList集合的方法

    class Program { static void Main(string[] args) { //数组:长度不可变,类型单一 //ArrayList集合:长度可以任意改变,类型可以不单一 //创 ...

  5. Spark SQL源码解析(五)SparkPlan准备和执行阶段

    Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...

  6. 《HelloGitHub》第 50 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  7. [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)

    引言 本系列适合0基础的人员,因为我们就是从0开始的,此系列记录我们步入微信营销企划并进行开发的一些经验分享,望与君共勉!作为刚刚踏入微信队伍中的新人的我们,如果有什么不对的地方,还望不吝赐教. 在开 ...

  8. 北醒激光模块TFmini——STM32驱动程序(STM32F103C8T6)

    背景:该激光模块属于精度比较高的激光测距模块,使用方便. 代码地址:https://github.com/W-yt/YuTian_Pro/tree/master/TFMini_Driver 平台: 硬 ...

  9. [Python3]踩坑实录-优化技巧1

    选择合适的数据结构 考虑不同的应用场景,应选择不同的数据结构 比如在查找多于插入的场景中,考虑字典Dict是不是更适合; 因为在Python3中, 字典Dict 通过hash把key映射到hash t ...

  10. jchdl - RTL实例 - AndReg

    https://mp.weixin.qq.com/s/p4-379tBRYKCYBk8AZoT8A   输入两组线相与,结果输出到寄存器.   参考链接 https://github.com/wjcd ...