解决DeferredResult 使用 @ResponseBody 注解返回中文乱码

Spring MVC 项目在使用 DeferredResult 实现异步接口,但返回中文乱码,显示的都是问号。

相关代码:

/**
	 * 长轮询
	 * 
	 * @return
	 */
	@RequestMapping(value = "ctrldf.do", method = RequestMethod.GET)
	@ResponseBody
	public DeferredResult> DeferredControl(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// 设置响应内容编码,解决直接在浏览器地址栏访问中文内容乱码的问题
		response.setCharacterEncoding("utf-8");
		// 设置响应内容类型
		response.setContentType("application/json");
		DeferredResult> result = new DeferredResult>(10000l, null); // 设置超时10s,超时返回null

		Personal personal = SecurityUtils.getPersonal(request);
		Long personalId = personal.getId();
		if (personalId == null) {
			// outFailureJson(response, BaseCodeMessage.personal_10001);
			result.setErrorResult(BaseCodeMessage.personal_10001);
			return result;
		}

		Long familyId = personal.getFamilyId();
		if (familyId == null) {
			// outFailureJson(response, "1", "家庭编号不能为空");
			result.setErrorResult("家庭编号不能为空");
			return result;
		}
}

其中尝试使用

		// 设置响应内容编码,解决直接在浏览器地址栏访问中文内容乱码的问题
		response.setCharacterEncoding("utf-8");
		// 设置响应内容类型
		response.setContentType("application/json");
发现根本不起作用。

解决方法:

需要在 spring-mvc.xml 中添加以下内容:

	
	
		
			
				text/plain;charset=UTF-8
				text/html;charset=UTF-8
			
		
	

	
		
			
					

			
		
	

	
最初我是只添加了:


	
	
		
			
					
			
		
	
这样子使用 以下代码 是没有乱码的。

相关代码如下:

@RequestMapping("/savegw.do")
	@ResponseBody
	public void savegw(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置响应内容编码,解决直接在浏览器地址栏访问中文内容乱码的问题
		response.setCharacterEncoding("utf-8");
		// 设置响应内容类型
		response.setContentType("text/plain");
		try {
			OutputStream out = response.getOutputStream();
			if (content == null){
				content = "";
			}
			out.write(content.getBytes());
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
}
有什么区别呢?

上面的方法返回值是 DeferredResult, 而这里返回值是 void。

另外看到有的文章中提到:

	
		
			
				text/plain;charset=utf-8
				text/html;charset=UTF-8
			
		
	
不知是用于什么情况。

注意:有文章提到 上面配置的 xml 必须在  之上,这个

你可能感兴趣的:(javascript,json,测试)