SpringMVC返回json数据+解决中文乱码

使用ajax来发送get请求到springMVC后台,后台返回json数据

JSP代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script>
		function createAjaxObj(){
			var req;
			if(window.XMLHttpRequest){
				req = new XMLHttpRequest();
			}else{
				req = new ActiveXObject("Msxml2.XMLHTTP");  //ie
			}
			return req;
		}
		
		function sendAjaxReq(){
			var req = createAjaxObj();
			req.open("get","myajax.do?method=test2&uname=张三zhang&a="+Math.random());
			req.setRequestHeader("accept","application/json"); 
			req.onreadystatechange  = function(){
			// 获取服务器的响应结束
				var text = req.responseText;
				// 获取h1元素
				var h1 = document.getElementById("h1");
				h1.innerHTML = text;
				
				eval("var result="+req.responseText);
				document.getElementById("div1").innerHTML=result.user.uname;
			};
			req.send(null);
		}
	</script>
  </head>
  
  <body>
    <a href="javascript:void(0);" οnclick="sendAjaxReq();">测试</a>
    <div id="div1"></div>
    
    <h1 id="h1"></h1>
  </body>
</html>

SpringMVC后台代码:

package com.sxt.action;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sxt.po.User;

@Controller
@RequestMapping("myajax.do")
public class MyAjaxController {
	
	@ResponseBody //设置返回参数为json数据
	@RequestMapping(params="method=test2",method=RequestMethod.GET)
	public Map<String,Object> test2(String uname,HttpServletResponse response
			,HttpServletRequest request) throws Exception{ 
		//处理响应编码问题
		response.setHeader("Content-Type", "text/html;charset=utf-8");
//		request.setCharacterEncoding("utf-8"); //只对post请求有效
		//设置get请求的编码参数,如果是post请求只需request.setCharacterEncoding("utf-8")
		String uname2 = new String(uname.getBytes("iso8859-1"),"utf-8");
		System.out.println(uname2); 
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", "老张");
		map.put("user", new User("潇洒哥","22"));
		return map;
	}
}

注意:中文乱码问题

1、get请求中含有中文时,后台获取get传递的参数时要这样获取:String uname2 = new String(uname.getBytes("iso8859-1"),"utf-8");

      如果是post请求,则在获取参数之前直接加上request.setCharacterEncoding("utf-8");      即可解决问题

2、后台返回数据包含中文(get与post处理方法是一样的是一样的)

      在返回数据之前加上  response.setHeader("Content-Type", "text/html;charset=utf-8");     即可解决问题

      此时前端接受的数据为utf-8

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以尝试以下几种方法来解决Spring MVC发送POST请求后出现中文乱码的问题: 1. 在Spring MVC的配置文件(比如`web.xml`)中添加字符编码过滤器。例如,使用`org.springframework.web.filter.CharacterEncodingFilter`,将请求和响应的字符编码都设置为UTF-8。 ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 2. 在Spring MVC的配置文件中,设置`RequestMappingHandlerAdapter`的`messageConverters`属性,指定使用UTF-8字符集编码。 ```xml <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text/plain;charset=UTF-8"/> </bean> </list> </property> </bean> </list> </property> </bean> ``` 3. 如果使用了`@RestController`注解来标记控制器类,可以在该类上添加`produces = "application/json;charset=UTF-8"`属性,指定响应的字符编码为UTF-8。 ```java @RestController @RequestMapping(value = "/example", produces = "application/json;charset=UTF-8") public class ExampleController { // ... } ``` 通过以上方法之一,你应该能够解决Spring MVC发送POST请求后出现中文乱码的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值