`
weitao1026
  • 浏览: 1048127 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

springMVC的@ResponseBody出现乱码解决方法

阅读更多
使用@ResponseBody出现乱码解决方法

1、 RequestMapping
Java代码  收藏代码
    @Controller 
    @RequestMapping(value = "/test") 
    public class TestController { 
     
        @ResponseBody 
        @RequestMapping(value = "/test", method = {RequestMethod.GET}) 
        public String test() { 
            return "中文"; 
        } 
    } 

2、原因是org.springframework.http.converter.StringHttpMessageConverter类默认编码是IOS-8859-1

3、解决方法

   3.1、自己定义一个HttpMessageConverter<String>的实现类即可解决问题。
Java代码  收藏代码

    public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { 
     
        public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 
     
        private final List<Charset> availableCharsets; 
     
        private boolean writeAcceptCharset = true; 
     
        public UTF8StringHttpMessageConverter() { 
            super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL); 
            this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values()); 
        } 
     
        public void setWriteAcceptCharset(boolean writeAcceptCharset) { 
            this.writeAcceptCharset = writeAcceptCharset; 
        } 
     
        @Override 
        public boolean supports(Class<?> clazz) { 
            return String.class.equals(clazz); 
        } 
     
        @Override 
        protected String readInternal(@SuppressWarnings("rawtypes") Class clazz, HttpInputMessage inputMessage) throws IOException { 
            Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType()); 
            return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset)); 
        } 
     
        @Override 
        protected Long getContentLength(String s, MediaType contentType) { 
            Charset charset = getContentTypeCharset(contentType); 
            try { 
                return (long) s.getBytes(charset.name()).length; 
            } 
            catch (UnsupportedEncodingException ex) { 
                throw new InternalError(ex.getMessage()); 
            } 
        } 
     
        @Override 
        protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException { 
            if (writeAcceptCharset) { 
                outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets()); 
            } 
            Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType()); 
            FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset)); 
        } 
     
        protected List<Charset> getAcceptedCharsets() { 
            return this.availableCharsets; 
        } 
     
        private Charset getContentTypeCharset(MediaType contentType) { 
            if (contentType != null && contentType.getCharSet() != null) { 
                return contentType.getCharSet(); 
            } 
            else { 
                return DEFAULT_CHARSET; 
            } 
        } 
    } 


Java代码  收藏代码

    <mvc:annotation-driven conversion-service="conversion-service" validator="validator"> 
        <mvc:message-converters register-defaults="false"> 
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
            <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
            <bean class="my.pkg.UTF8StringHttpMessageConverter" /> 
        </mvc:message-converters> 
    </mvc:annotation-driven> 

3.2、设置StringHttpMessageConverter编码
Java代码  收藏代码

    <mvc:annotation-driven conversion-service="conversion-service" validator="validator"> 
            <mvc:message-converters> 
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
                <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
                <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
                <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 
                    <constructor-arg value="UTF-8" /> 
                </bean> 
            </mvc:message-converters> 
        </mvc:annotation-driven> 
分享到:
评论

相关推荐

    springMVC3使用@ResponseBody向浏览器返回 json,注意区分jar包前缀

    --处理 @ResponseBody 中文乱码问题 --&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&gt; &lt;property name="messageConverters"&gt; &lt;list&gt; &lt;!-- Support...

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    本文将详细介绍如何解决SpringMVC中`@ResponseBody`注解返回中文乱码的问题。 首先,我们可以尝试使用`@RequestMapping`注解的`produces`属性来指定响应内容的MIME类型和字符集。例如: ```java @RequestMapping...

    SpringMVC解决乱码

    然而,在使用SpringMVC时,可能会遇到乱码问题,例如在使用@ResponseBody注解时返回的数据出现乱码。在本文中,我们将讨论解决SpringMVC乱码问题的两种方法。 方法一:配置AnnotationMethodHandlerAdapter 在...

    SpringMVC请求/响应乱码问题解决方案解析

    本文将详细介绍SpringMVC请求/响应乱码问题解决方案,并提供了多种解决方法。 GET请求乱码原因分析:GET请求参数是通过请求行中的URL发送给Web服务器(Tomcat)的。Tomcat服务器会对URL进行编码操作(此时使用的是...

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

    以下将详细介绍四种解决Spring MVC中处理Ajax请求时中文乱码的方法。 ### 方法一:在@RequestMapping注解中指定字符集 在控制器的方法上添加`@RequestMapping`注解,并明确指定`produces`属性为`"text/html;...

    springMVC资料

    解决这个问题通常需要在服务器端和客户端都设置正确的字符编码,例如在SpringMVC中,可以在Controller方法上使用`@ResponseBody`注解,并指定`produces="text/plain;charset=UTF-8"`来确保响应内容使用UTF-8编码。 ...

    用ajax传递json到前台中文出现问号乱码问题的解决办法

    后来发现,因为在controller中返回json用了@ResponseBody,而spring源码中@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,而项目用的编码为utf-8,所以传中文会出现乱码。 这里我使用了注解来解决: @...

    解决SpringMvc后台接收json数据中文乱码问题的几种方法

    本文将深入探讨两种解决SpringMvc后台接收JSON数据中文乱码问题的方法。 1. **使用Ajax传输数据** 当前端通过Ajax使用JSON格式向SpringMvc后台发送数据时,可能出现中文乱码。这通常是因为服务器默认的字符编码不...

    SpringMVC+Mybatis+Maven 纯XML配置

    1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器

    SpringMVC+Mybatis JAVA配置 非XML

    1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器

    分享SpringMVC归纳

    此外,还讲解了如何编写Handler、如何处理请求映射、如何进行参数绑定、如何解决乱码问题、如何实现数组、列表、Map的绑定、如何实现文件上传以及如何实现JSON交互等内容。这些知识点对于初学者和有一定经验的开发者...

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

    `@ResponseBody`注解是Spring MVC提供的一种将方法返回值直接转换为HTTP响应体内容的机制,而不需要视图解析器参与。以下是关于如何在Spring MVC中返回XML和JSON格式数据的详细讲解。 1. **返回XML格式数据** 要...

    spring 问题总结实用知识库分享知识分享

    springMVC ResponseBody 返回汉字乱码解决方案 在使用 SpringMVC 时,可能会出现汉字乱码错误。解决方法是,使用 SpringMVC 的编码过滤器,确保响应体的编码正确,并且确保视图文件的编码正确。 springboot 提示...

    Spring MVC面试宝典1.pdf

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

    springmvc-restful

    本篇将深入探讨"springmvc-restful"主题,特别是关于乱码的处理以及如何实现Spring MVC的过滤器。 1. **RESTful API**: REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于...

    Springmvc完成ajax功能实例详解

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

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

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

    springmvc开发笔记

    通过以上两种方案,我们可以有效地解决Spring MVC框架下异步请求时出现的乱码问题。方案一相对简单,适用于简单的编码更改需求;方案二则更为灵活,可以根据实际项目需求自定义转换器,从而更好地控制编码格式。无论...

Global site tag (gtag.js) - Google Analytics