记一次@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 ...
随机推荐
- hdu6470 Count 矩阵快速幂
hdu6470 Count #include <bits/stdc++.h> using namespace std; typedef long long ll; , mod = ; st ...
- 自定义spring-boot-starter
需求背景: Springboot是Spring旗下优秀的子项目之一,其核心理念之一:约定优于配置.通过自动化的配置极大的提升了我们的开发效率,目前已集成诸多组件的starter起步依赖,帮助我们更加快 ...
- PAT-1057 Stack (树状数组 + 二分查找)
1057. Stack Stack is one of the most fundamental data structures, which is based on the principle of ...
- Spring Boot 教程 (4) - swagger-ui
Spring Boot 教程 - swagger-ui 1. 什么是Swagger? Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到 ...
- SQL——模糊查询LIKE
LIKE操作符 - 用于WHERE子句中搜索列中指定模式. 语法:SELECT columnName(s) FROM tableName WHERE columnName LIKE patter ...
- linux:安装
安装准备 1.虚拟机:VMware® Workstation 12 Pro 2.系统:CentOS-6.5-i386-bin-DVD1.iso 新建虚拟机 网络设置: NAT:配置好后Windows与 ...
- Magicodes.IE 2.2发布
Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.已加入NCC开源组织. Magicodes.IE 2.0发布 Magico ...
- [UWP]使用离散式关键帧播放动画
这篇文章介绍离散式关键帧,并使用它做些有趣的动画. 1. 什么是离散式关键帧 以DoubleAnimationUsingKeyFrames为例,它支持四种Double的关键帧,其中EasingDoub ...
- [Unity2d系列教程] 005.Unity如何使用外部触控插件FingerGuesture
用过Unity的都知道自带的Input.touches并不支持鼠标输入,给我们的调试带来很大的不方便.那么我们会发现其实有很多触控方面的插件,如inputtouches,easy touch,fing ...
- Bank5
Account: package banking5; //账户 public class Account { protected double balance; public Account(doub ...