`

spring4 使用@ResponseBody 返回中文时发现客户端乱码

 
阅读更多

在使用spring4 使用@ResponseBody 返回中文时发现客户端乱码,奇怪了,已经在web.xml中配置了过滤器

配置如下:

 <filter>

        <description>字符集过滤器</description>

        <filter-name>encodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <description>字符集编码</description>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

            

            <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>

 

后来经过查资料发现 @RequestMapping 中添加 produces 配置 

配置如下

@RequestMapping(value="user/reg.do",method =RequestMethod.POST,produces={"application/json;charset=UTF-8"})

返回的中文不乱码了。

 

charset=UTF-8:设置字符集为utf-8

@RequestMapping(value = "/user/reg.do", produces = "application/xml"):表示将功能处理方法将生产xml格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/xml”时即可匹配。

 

此种方式相对使用@RequestMapping的“headers = "Accept=application/json"”更能表明你的目的。

 

当你有如下Accept头:

①Accept:text/html,application/xml,application/json

将按照如下顺序进行produces的匹配 ①text/html ②application/xml ③application/json

②Accept:application/xml;q=0.5,application/json;q=0.9,text/html

将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml

q参数为媒体类型的质量因子,越大则优先权越高(从0到1)

③Accept:*/*,text/*,text/html

将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*

 

即匹配规则为:最明确的优先匹配。

 

 

2.当使用 response 返回json字符串时,中文又乱码了。

代码:

result = mapper.writeValueAsString(resReslt);

pt = response.getWriter();

 

pt.write(result);

 

修改代码后:

 

response.setHeader("Content-type", "text/html;charset=UTF-8");  

//这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859  

response.setCharacterEncoding("UTF-8");  

pt = response.getWriter();

 

pt.write(result);

 

设置报文头和字符集后,中文就不乱码了。

 

 

 

 

分享到:
评论

相关推荐

    Spring MVC中默认的ResponseBody为String的乱码问题.pdf

    在Spring MVC框架中,开发者经常遇到ResponseBody返回的字符串出现乱码的问题,特别是当字符串中包含中文字符时。这是因为Spring MVC默认使用了StringHttpMessageConverter来处理Response Body中的字符串,而这个...

    jackon 2.9.1

    Jackson是Spring框架中常用来处理HTTP响应体,特别是当使用`@ResponseBody`注解时,它可以将Java对象转换成JSON格式的字符串,直接返回给客户端。 在描述中提到了`@ResponseBody`注解,这是Spring MVC框架的一部分...

    Spring MVC面试题(2022最新版)

    当控制器方法上标注了`@ResponseBody`时,Spring MVC会将方法的返回值直接序列化为JSON或XML格式,并作为HTTP响应体返回给客户端。前端可以通过AJAX技术(如jQuery的$.ajax()方法)发送异步请求,并处理后端返回的...

    Springmvc如何返回xml及json格式数据

    在这个例子中,`Result`类包含了状态信息,通过`@ResponseBody`注解,Spring MVC会将`Result`对象转换为JSON格式并返回给客户端。 3. **返回数据的错误尝试** - **错误尝试1**:将XML数据转换为String直接返回,...

    flex上传下载 并解决中文乱码

    在本主题中,我们将深入探讨如何使用Flex进行文件上传和下载,并解决过程中可能出现的中文乱码问题。 一、Flex文件上传 1. Flex组件:Flex中可以使用`FileReference`组件来实现文件上传。用户通过选择文件后,`...

    Spring MVC面试宝典1.pdf

    ##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **GET请求**:同样可以通过配置过滤器解决,也可以通过修改Tomcat...

    spring mvc 自學筆記

    在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...

    springmvc-restful

    在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了构建高效、灵活和模块化的Web应用程序的能力。在处理RESTful API时,Spring MVC扮演着核心角色。本篇将深入探讨"springmvc-restful"主题,特别是关于...

    基于java反射机制的山寨版WEB2

    Spring MVC提供了`@RequestBody`和`@ResponseBody`注解,可以方便地将HTTP请求体解析为Java对象,或将处理结果转化为JSON返回给客户端。 为了实现这些功能,开发者可能使用了Spring Boot框架,它简化了Spring应用的...

    SpringMVC面试题(2024最新版).docx

    **处理中文乱码**: POST请求通过设置Filter解决,GET请求可以通过设置`CharacterEncodingFilter`。 **异常处理**: 可以自定义异常处理器,比如使用@ControllerAdvice和@ExceptionHandler注解。 **获取Request、...

    Spring MVC 关于controller的字符编码问题

    在处理这些参数时,Spring MVC会自动进行编码和解码,但需要注意的是,如果你在请求体中使用非英文字符,确保客户端和服务器都使用一致的字符集,否则仍然可能出现编码问题。 总结来说,Spring MVC中处理Controller...

    SpringMVC面试题(2020最新版).pdf

    处理中文乱码问题,可以设置HttpServletRequest的编码方式,对于POST请求,可以在过滤器中设置request.setCharacterEncoding("UTF-8");GET请求一般默认处理正确,但如果URL编码了,也需要解码。 Spring MVC的异常...

    SpringMVC面试题.pdf

    - 对于响应内容的乱码,可以在视图中设置相应编码,或者在返回JSON时,确保服务器与客户端之间统一编码。 以上是对Spring MVC面试中常见的一些知识点的详细解答,这些内容涵盖了Spring MVC的基本概念、工作流程、...

    Java Web项目中Spring框架处理JSON格式数据的方法

    关于乱码问题,由于HTTP协议默认的字符编码为ISO-8859-1,当返回的数据包含中文时,未经转码的中文字符在HTTP响应中可能会出现乱码。为了解决这个问题,需要在Spring的配置文件中对messageConverters进行配置,确保...

    JQuery异步获取返回值中文乱码的解决方法

    针对JQuery异步获取返回值时遇到中文乱码的问题,文档中提出了一个有效的解决方法,这涉及了Web开发中常见的字符编码问题。为了彻底解决这一问题,我们需要从客户端到服务器端的整个数据交互流程中对字符编码进行...

    Springmvc完成ajax功能实例详解

    当返回的字符串包含中文字符时,可能会出现乱码问题。为了解决这个问题,我们有两种解决方案: 1. 修改`@RequestMapping`注解,指定响应的字符集,如上面`Ajax1`方法所示。 2. 在Spring MVC配置中,通过`...

    springmvc开发笔记

    在使用Spring MVC框架进行Web应用开发时,经常会遇到一个常见的问题——异步请求(尤其是AJAX请求)返回的数据出现乱码现象。这个问题通常发生在Spring MVC默认的编码方式与客户端或服务器端期望的编码不一致时。...

    springmvc 发送ajax出现中文乱码的解决方法汇总

    在开发Web应用时,Spring MVC和Ajax的交互过程中,经常遇到中文乱码的问题。这个问题主要出现在数据从服务器传输到客户端的过程中,由于编码设置不正确,导致中文字符无法正常显示。以下将详细介绍四种解决Spring ...

    springMVC资料

    "AJAX中文乱码.txt"可能涉及的是在使用SpringMVC进行AJAX通信时遇到的字符编码问题。在JavaScript中发送AJAX请求到服务器,如果处理不当,可能会出现中文乱码。解决这个问题通常需要在服务器端和客户端都设置正确的...

    SSM 梳理 面试题整理

    - **响应客户端**:将渲染后的结果返回给客户端。 #### 2. 对SpringMVC的理解 - **MVC框架**:SpringMVC是一个基于MVC架构的Web应用框架,主要用于构建动态的Web应用程序。 - **子容器**:SpringMVC作为Spring...

Global site tag (gtag.js) - Google Analytics