SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法

Spring使用AnnotationMethodHandlerAdapter的handleResponseBody方法, AnnotationMethodHandlerAdapter使用request
header中"Accept"的值和messageConverter支持的MediaType进行匹配,然后会用"Accept"的第一个值写入 response的"Content-Type"。一般的请求都是通过浏览器进行的,request header中"Accept"的值由浏览器生成。

有人跟踪@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,所以显然ajax接受服务器端返回的中文必然是乱码。

我遇到这个问题的时候,查阅了一下资料,采用了一个比较简单的方法来解决这个问题,就是需要服务器返回中文的时候不使用这个注解,而是直接用HttpServletResponse的对象来完成传输,在服务器端可以通过response.setContentType("text/plain;charset=UTF-8");来设定编码类型,这样就不会出现中文乱码了。

服务器端核心代码如下:

@RequestMapping(value = "test", method = RequestMethod.POST)
	public void test(HttpServletRequest request,
			HttpServletResponse response) {
		String result = null;
		//取得客户端传来的值
		String userName = request.getParameter("userName");
		//向客户端返回一句话
		result = "您好!";

		PrintWriter out = null;
		response.setContentType("text/plain;charset=UTF-8");
		try {
			out = response.getWriter();
			out.write(result.toString());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			out.close();
		}
	}

返回值时根据自己的数据类型进行设置,常用的有:

response.setContentType("text/html; charset=utf-8");           html

response.setContentType("text/plain;
charset=utf-8");          文本

response.setContentType("application/json;
charset=utf-8");    数据

response.setContentType("application/xml;
charset=utf-8");      xml

(原文地址:http://blog.csdn.net/zhshulin)

SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法,布布扣,bubuko.com

时间: 2024-10-27 00:04:11

SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法的相关文章

ajax传输中文乱码解决方法

问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,ajax估计就是这样的好处吧,目前对ajax还不太熟悉. ajax传输乱码时的代码: 1 function saveForm(){ 2 if(document.theformadd.onsubmit()){ 3 disableAllBtn(true); 4 j$.ajax({ 5 type:"get&q

Django 分页查询并返回jsons数据,中文乱码解决方法

一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF-8 import os from django.core import serializers from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render from django.http import

struts2中注解redirect时传递参数中文乱码问题解决方法

试过了很多方法  tomcat 编码  .字符串转换编码 .URLEncoder  .. 但是都没解决,后来仔细看了   struts2 的redirect ,redirectAction , 加上 params={"encode","true"} 就不会有乱码了 @Action(value = "/backend/deleteApplyInfoOfAuditById", results = { @Result(name = "succ

jquery的ajax()函数传值中文乱码解决方法介绍

前台 jQuery.post("/MailTemplate/SaveMailTemplate?Code=" + item.Code + "&DisplayName=" +encodeURI   (item.DisplayName) + "&Body=" +encodeURI(item.Body), {}, function (data) {                                if (data == 'S

Spring MVC @ResponseBody注解返回值中文乱码问题

在Spring MVC 的Controller中使用@ResponseBody注解向客户端返回数据时,如果没有特殊设置则中文将显示为乱码,此时需要在Spring-MVC.xml配置文件中加入如下代码 <!-- 避免IE在ajax请求时,返回json出现下载 --> <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHt

SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面

导包: 除了一些spring的包之外,还需要jackson-annotations.jar , jackson-core.jar , jackson-databind.jar 这三个包 开启@ResponseBody注解: 在 spring-mvc.xml 中通过<mvc:annotation-driven />开启@ResponseBody注解 使用@ResponseBody标注业务方法 package com.loger.controller; import java.util.Array

sublime text3 中 python3编译出现中文乱码解决方法

参考博文:https://blog.csdn.net/Bin_bin_bingo/article/details/80531582 一.乱码现象 利用sublime自带编译快捷方式ctrl+B会出现中文乱码的情况 print("没有循环数据!") print("完成循环!") 二.解决方法 在Python3.sublime.build中写入下面代码,之后再用ctrl+B进行编译,返回“utf-8”,并且能成功打印中文 { "cmd": [&quo

ajax url参数中文乱码解决方法

较好的处理办法,对js的url中的中文参数值使用两次encodeURI(),即encodeURI(encodeURI("url的中文参数值")) JS代码: var name="我是中文"; $.get( "edit.php?&name="+encodeURI(name), function(result){ if(result != ''){alert(result);} $(msg).html(name); }); PHP代码获取na

ubuntu中flash的中文乱码解决方法

ubuntu装好之后, 为浏览器firefox安装flash插件, 后来发现中文会变成方框. 如何解决? 输入:cd /etc/fonts/conf.d/ 为了安全,备份一下: sudo cp 49-sansserif.conf 49-sansserif.conf_backup 输入如下指令: sudo gedit ./49-sansserif.conf 此时文件显示内容. 将其中的第1.2.4个后面的sans-serif或者serif用你自己系统中支持中文的字体的名字代替,注意字体名字的大小写