记一次@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 ...
随机推荐
- 观察者模式C++实现
#include <iostream> #include <vector> #include <string> using namespace std; typed ...
- 2017-ACM南宁网络赛
In this problem, we will define a graph called star graph, and the question is to find the minimum d ...
- poj3621 SPFA判断正环+二分答案
Farmer John has decided to reward his cows for their hard work by taking them on a tour of the big c ...
- layui 数据表格最简单的点击事件
//定义点击事件 table.on('row(test)', function(obj){ console.log(obj.tr) //得到当前行元素对象 console.log(obj.data) ...
- unicode 的中文字符串,调用 isalnum()返回的是 True ?
描述 Python isalnum() 方法检测字符串是否由字母和数字组成. 语法 isalnum()方法语法: str.isalnum() 返回值 如果 string 至少有一个字符并且所有字符都是 ...
- MySQL常用控制台指令
MySQL服务的启用与停止 MySQL服务的启用: net start mysql80 MySQL服务的停止: net stop mysql80 MySQL的登入与退出 数据库的登入: mysql - ...
- eatwhatApp开发实战(十)
android应用中,很少有一个activity的app,这次我们设置一个activity,通过listview的点击跳转并显示对应的商店信息. 首先创建类ShopInfoActivity,对应设置其 ...
- 「MoreThanJava」一文了解二进制和CPU工作原理
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- Rocket - tilelink - SourceShrinker
https://mp.weixin.qq.com/s/1vyfhZuF4RyRE5Qjj6AGWA 简单介绍SourceShrinker的实现. 1. 基本介绍 用于把上游节点的 ...
- jchdl-GSL-实例 - 使用Intellij IDEA创建Mux
https://mp.weixin.qq.com/s/yP9xKeg0iHJChuMPzxdJtA https://github.com/wjcdx/jchdl/blob/master/src/org ...