springMVC 3.2 接收和返回json 中文乱码问题

折腾了一星期啦,springMVC处理含有中文的json参数乱码,按照网上的各种尝试,改配置的,自己写消息转换器的,各种尝试均失败,不知道哪位有实际经验供借鉴下呢

1、按照网上同行的说法改的配置:
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">


class="org.springframework.http.converter.StringHttpMessageConverter">


text/plain;charset=UTF-8



class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">


text/plain;charset=UTF-8
application/json;charset=UTF-8





<mvc:annotation-driven/>

2、自己写的转换类
public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter{

public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

private final Charset defaultCharset;

private final List<Charset> availableCharsets;

private boolean writeAcceptCharset = true;

private static final MediaType utf8 = new MediaType("text", "plain", Charset.forName("UTF-8"));  

/**
 * A default constructor that uses {@code "ISO-8859-1"} as the default charset.
 * @see #StringHttpMessageConverter(Charset)
 */
public UTF8StringHttpMessageConverter() {
    this(DEFAULT_CHARSET);
}

/**
 * A constructor accepting a default charset to use if the requested content
 * type does not specify one.
 */
public UTF8StringHttpMessageConverter(Charset defaultCharset) {
    super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL);
    this.defaultCharset = DEFAULT_CHARSET;
    this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
}

/**
 * Indicates whether the {@code Accept-Charset} should be written to any outgoing request.
 * <p>Default is {@code true}.
 */
public void setWriteAcceptCharset(boolean writeAcceptCharset) {
    this.writeAcceptCharset = writeAcceptCharset;
}

@Override
public boolean supports(Class<?> clazz) {
    return String.class.equals(clazz);
}

@Override
protected String readInternal(Class<? extends String> 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) {
        // should not occur
        throw new IllegalStateException(ex);
    }
}

@Override
protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException {
    if (this.writeAcceptCharset) {
        outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());
    }
    Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType());
    FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset));
}

/**
 * Return the list of supported {@link Charset}.
 * <p>By default, returns {@link Charset#availableCharsets()}. Can be overridden in subclasses.
 * @return the list of accepted charsets
 */
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;
    }
}

protected MediaType getDefaultContentType(String dumy) {  
    return utf8;  
}  

}

这些尝试都不行的,哪位遇到过呢,高分求助~

1个回答

在RequestMapping中加入 produces="text/html;charset=UTF-8"即可,例如

@RequestMapping(value="/testGarbled.do", produces="text/html;charset=UTF-8" )
@ResponseBody
public String testGarbled(ModelMap modelMap) {
    return "中文乱码";
}
xxlrcxx
xxlrcxx 比网上其他方法方便多了!!赞一个
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springMVC 返回json乱码问题
多次遇见过这个问题,springMVC下返回给前端的json字符串,中文总是乱码,每次都要去翻一下之前的代码来看解决办法,有必要做个笔记记一下这个问题了。   解决方法: 在方法注解中加入如下: @RequestMapping(value = &quot;/auditingSelector&quot;, produces = &quot;application/json;charset=UTF-8&quot;) ...
springmvc处理json返回中文乱码问题
&amp;lt;!-- 处理请求返回json字符串的乱码问题 --&amp;gt; &amp;lt;mvc:annotation-driven&amp;gt; &amp;lt;mvc:message-converters&amp;gt; &amp;lt;bean class=&quot;org.springframework.http.converter.StringHttpMessageConverte...
springmvc返回中文乱码问题
<mvc:annotation-driven> <!-- 消息转换器 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter">
处理SpringMVC返回json乱码问题
处理SpringMVC返回json乱码问题
SpringMvc @responseBody 返回中文乱码问题
@RequestMapping(value = &quot;saveGoods&quot;,produces=&quot;text/html;charset=UTF-8&quot;) @ResponseBody
JSON返回的数据中文乱码问题!!!
服务器返回的是utf-8,jsp页面上也是utf-8,数据库也是utf-8怎么就是乱码呢!!!! 在网上天昏地暗地找了两天总算有解决方案了: 问题出在getHttpResponse 输入流! in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 改为 i
SpringMVC Controller后台返回Json到前台乱码问题
乱码问题主要是字符编码的问题可通过指定字符格式来解决,不多说,直接上图 @RequestMapping(value = { &quot;json&quot; } ,produces = &quot;application/json; charset=utf-8&quot;) @ResponseBody public String json(Operation operation,Model model,HttpServletReques...
SpringMVC下读取json返回字符串的乱码问题
@RequestMapping(value = "/", method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) 添加这个参数produces = {"application/json;charset=UTF-8"}
SpringMVC中@ResponseBody注解返回json中文乱码问题
SpringMVC中@ResponseBody注解返回josn中文乱码问题网上搜索到n中解决的办法,大体分为两类: 在注解中添加参数: 这种方法网上的各种方法我是没有实验通过 自己解析: 可以在controller类的每一个方法传入一个httpservletResponse的response参数,response的中格式设为utf-8,这个也是可以的,没有任何问题,但是这种
SpringMVC返回数据中文乱码问题浅析
该文章只讨论SpringMVC的中文乱码,所以首先你要确定要返回的数据在Dao层、Service层都没有问题。 如果你是用HttpServletResponse返回数据,那么你可以采用下面这种方式解决乱码: response.setCharacterEncoding("UTF-8"); //设置编码格式 response.setContentType("text/html"); //设置...
使用springmvc返回中文乱码问题的解决
 SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是返回值是String类型的时候,在页面显示中文会乱码,是因为其中字符串转换和对象转换用的是两个转换器,而String的转换器中固定了转换编码为ISO-8859-1; 解决办法1:在@RequestMapping(value="/classFind",produces="text/html
笔记:解决springMVC返回中文乱码问题
方法一@RequestMapping(value="/testCharset",produces="text/html;charset=UTF-8")在@RequestMapping中加入produces=”text/html;charset=UTF-8”;方法二 <mvc:annotation-driven> <!-- 设置返回信息字符集, 默认为iso --> <m
springmvc中@responseBody返回Json格式中文乱码问题
参考了AOS中的配置解决问题。 在配置文件中加入:
SpringMVC Ajax response中文返回乱码问题的解决方法
org.springframework.http.converter.StringHttpMessageConverter默认采用的ISO-8859-1编码,所以在返回中文时候显示乱码,配置SpringMVC的配置文件添加如下配置:
SpringMVC注解@ResponseBody返回数据中文乱码问题
中文乱码是因为springmvc使用的默认处理字符集是iso-8859-1。 方法1:给需要返回字符串的方法添加注解: @RequestMapping(value = &quot;/getXXX&quot;,produces = &quot;text/html;charset=UTF-8&quot;) @ResponseBody  方法2:在配置文件中设置: &amp;lt;mvc:annotation-driven&amp;gt; ...
springmvc 请求参数中文乱码 ,@ResponseBody 返回中文乱码问题
1. springmvc 请求参数中文乱码  一般在 web.xml 加上一个Filter设置编码为UTF-8可以解决 utf8Filter org.springframework.web.filter.CharacterEncodingFilter forceEncoding true encodi
【SpringMVC】返回Json数据乱码问题
一、前言 在前面的文章中,小编曾介绍过java在编程的过程中数据乱码的问题。大部分情况是由于数据的格式不对应,最近接手的项目中,使用的是springmvc,同样也出现了乱码的问题。 二、情况介绍 springmvc 返回json 三、具体情况 如果不做设置的话,返回的信息如下: 可以看出,返回的数据中是乱码的,其中的中文都为??,清楚的判断出代码出格式不同的。 对 于,springm...
springMVC返回数据的乱码问题
最近在使用springmvc来实现一个rest请求操作。后端数据库采用hbase。开始的时候页面返回的数据中的中文总是有乱码问题,定位问题一直是hbase端的,后来检查发现不是hbase的问题。就聚焦到springmvc上面。因为采用了 @ResponseBody来返回数据,就是这里涉及到了编码问题。 添加 @RequestMapping(value="/{tablename}/{rowke
java返回json中文乱码问题-解决方法
增加一行代码 response.setContentType(“text/html;charset=utf-8”);
springMVC返回的json中文全是问号
springMVC.xml里加上: &amp;lt;mvc:annotation-driven&amp;gt; &amp;lt;mvc:message-converters register-defaults=&quot;true&quot;&amp;gt; &amp;lt;!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 注解请求映射 默认是ISO-88859-1,...
springmvc json返回死循环
错误描述:两个多对多的实体,他们没有关联的时候,返回没有问题,当关联后,返回第一个实体(已json返回),报死循环错误。nn控制器代码:nn```n // 输入框的模糊匹配n @ResponseBodyn @RequestMapping("/inputFuzzyQuery")n public List inputFuzzyQuery(String keyword) n List schs = schoolService.fuzzyQueryMaxFive(keyword);//schs有数据n for (School sch : schs) n System.out.println(sch.toString());n n return schs;n n```n错误信息nn```n at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)n at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:72)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:23)n at org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)n at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)n at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)n at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:72)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:23)n at org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)n at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)n at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)n at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:72)n at org.codehaus.jackson.map.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:23)n at org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)n at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)n at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)n at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)n```nnn
SpringMVC返回JSON
<p>rn <br />rn</p>rn<p>rn <p>rn 20周年限定一卡通!<span style="color:#337FE5;">可学Java全部课程</span>,仅售799元(原价7016元),<span style="color:#E53333;">还送漫威正版授权机械键盘+CSDN 20周年限量版T恤+智能编程助手!</span>rn </p>rn <p>rn 点此链接购买:rn </p>rn <table>rn <tbody>rn <tr>rn <td>rn <span style="color:#337FE5;"><a href="https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy" target="_blank">https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy</a><br />rn</span>rn </td>rn </tr>rn </tbody>rn </table>rn</p>rn<span>&nbsp;</span> rn<p>rn <br />rn</p>rn针对企业开发的主流框架进行讲解,注重理论和实践的结合,课程内容深入源码,讲解深入浅出,每个技术点都配备具有典型性和实用性的案例及代码。使学生具备开发企业级项目的能力,同时针对框架新特性也有讲授,通过这些新功能实用性强、易用性高,可大幅降低 JavaEE 开发的难度,同时有效提升应用开发的优雅性。
springmvc 返回json 出现“??”
出现的可能原因:1.页面的显示字符集不正确,2服务器传递的数据乱码3,服务器查询出的数据乱码 1.对其报文查看,返回的response 中的字符集信息是utf-8,页面字符集表名服务器到客户端数据是正确的 2.数据库中的数据不是乱码的,取数据的url中也定义了字符集,取数据是正确的。?characterEncoding=UTF-8 3.查找@ResponseBody默认返回的字符集是ISO-
springMVC返回JSON的方式
方法一: @RequestMapping(value="/test" , method = RequestMethod.GET) @ResponseBody //加上这个注解 public String login(String username , HttpServletRequest request , HttpServletResponse response){ ...
SpringMVC返回Json的做法
2种实现方式 //返回Json的做法1 @RequestMapping(value="/student/{id}",method=RequestMethod.GET) public @ResponseBody Student getStudent(@PathVariable("id") String id){ System.out.println("id ==:"+id); Stu
SpringMVC 接收与返回参数
使用spring的两个注解标签  1: @RequestParam 当前台用form提交数据时 可以用map 进行接收 :@RequestParam HashMap map 也可以用 对应的实体类进行接收 数据。如果前台用ajax 这种异步提交的话 则 data:$('#updateform').serialize() 序列化表单的数据 2: @ResponseBody 该注解
springmvc 的 json返回配置
springmvc 的 json返回配置
springMVC注解方式返回json
springMVC注解方式返回json 1、建立Maven项目: junit junit 3.8.1 test org.springframework spring-context 4.0.5.RELEASE org.springframework spring-test 4.0.5.RELEA
springmvc 之 中文乱码问题
中文乱码分为get的请求和post的请求 get请求方式:获取参数进行重新编码 String userName = new String(request.getParamter(&quot;userName&quot;).getBytes(&quot;ISO8859-1&quot;),&quot;utf-8&quot;) post请求方式:在web.xml中添加如下配置 &amp;lt;!-- 设置字符过滤器 --&amp;gt; &amp;lt;filt...
springmvc解决中文乱码问题
在web.xml加入拦截器,完美解决   &amp;lt;filter&amp;gt; &amp;lt;filter-name&amp;gt;characterEncodingFilter&amp;lt;/filter-name&amp;gt; &amp;lt;filter-class&amp;gt;org.springframework.web.filter.CharacterEncodingFilter&amp;lt...
SpringMVC解决中文乱码问题
中文乱码解决方案 在表单提交时,如果遇到中文字符会出现乱码现象,Spring提供了一个CharacterEncodingFilter过滤器,可用于解决乱码问题。 CharacterEncodingFilter使用时需要注意以下问题: 表单提交以post方式提交 在web.xml配置中CharacterEncodingFilter过滤器 页面编码和过滤器指定的编码要保持一致 需要
解决SpringMVC的中文乱码问题
SpringMVC乱码问题的解决 Get请求乱码 在Tomcat目录下的conf目录下的service.xml文件中,添加语句:URLEncoding=&amp;quot;UTF-8&amp;quot; &amp;amp;lt;Connector port=&amp;quot;8989&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot; connectionTimeout=&amp;quot;20000&amp;quot
SpringMVC中文乱码问题
       Spring MVC整合的时候如何解决中文乱码问题。首先中文乱码问题有四个方面:一 页面本身的编码问题;二 客户端传到服务器上的中文数据乱码;三 服务器传回给客户端的中文数据乱码;四 数据库编码问题。一 页面本身编码问题https://www.cnblogs.com/DaTouDaddy/p/6519709.html二 客户端上传数据编码问题       首先解决客户端POST请求服...
SpringMvc 中文乱码问题
Jsp页面传值到Controller中为乱码。问题如下:rnJsp代码:rn[code=java]rn<%@ page language="java" contentType="text/html; charset=UTF-8"rn pageEncoding="UTF-8"%>rn<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>rn<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>rnrnrnrn rn rn rn rn rn rn rnrnrn rn rn rn rn rn 标签传递userDTO对象到controller中。rnrnrnweb.xml中确认添加了转码的filterrn[code=java]rnrn rn rn CharacterFilterrn org.springframework.web.filter.CharacterEncodingFilterrn rn encodingrn UTF-8rn rn rnrn rn CharacterFilterrn /*rn [/code]rnrnrncontroller中也能访问相应的方法:rn[code=java]rn@RequestMapping(value = "/add",method=RequestMethod.POST)rn public String add(@Valid UserDTO userDTO,BindingResult br,Model model,HttpServletRequest req)rn System.out.println(req.getCharacterEncoding());rn String olds= userDTO.getNickname();rn try rn String news =new String(olds.getBytes("ISO-8859-1"),"utf-8");rn System.out.println(olds);rn System.out.println(news);rn catch (UnsupportedEncodingException e) rn e.printStackTrace();rn rn return "redirect:../../admin/user/users";rn [/code]rnrn然后输出传递过来的中文值就为乱码。rnrnrn调试过程如下:rn首先输入以上三条代码,rn结果分别为“utf-8”(说明web.xml的编码filter过滤器没问题),乱码字符(olds是从dto中取出的字符,还是有问题),正常中文(通过其他代码,查询到dto中的字符编码为ISO8859-1,因此将Iso8859-1转为utf-8就能正常显示了)。rnrn综上所述,问题出在DTO的编码格式为IS08859-1,可以通过以上方式解决。但是项目中存在大量的中文输入问题,每次都转码很不现实。有没有什么方法统一的解决以上问题?rnuserDTO是通过页面层标签生成的,对这个 modelAttribute="userDTO" 属性不是很了解,是不是这里出了什么问题?rn欢迎大家讨论。rn rn 添加用户功能rn rn 用户名(必须是英文):rn rn rn rn 显示名称(可以是中文): rn [/code]rnrn以上为Jsp页面部分代码,已经将编码格式统一为UTF-8,使用
SpringMVC json数据中文乱码问题
解决方案 一、使用produces属性 设置返回的内容的类型以及字符集 @RequestMapping(value = &quot;/itemcat/list&quot;,  produces=MediaType.APPLICATION_JSON_VALUE+&quot;;charset=utf-8&quot;) @ResponseBody public String getItemCatList(String callback){...
springmvc中文乱码问题
在ie浏览器,输入uri:http://localhost:8080/hello2.do?name=梦 出现错误------- 信息: Error parsing HTTP request header &amp;gt; Note: further occurrences of HTTP header parsing errors will be &amp;gt; logged at DEBUG lev...
SpringMVC笔记:中文乱码问题
前台以post方式提交中文数据,后台发生乱码情况。说明需要配置一个转码过滤器,在web.xml中设置: &amp;lt;filter&amp;gt; &amp;lt;filter-name&amp;gt;CharacterEncodingFilter&amp;lt;/filter-name&amp;gt; &amp;lt;filter-class&amp;gt;org.springframework.web.filt...
springmvc 解决中文乱码问题
1.修改 myeclipse 或者 eclipse 的环境(设置文件编码和 JSP 页面的编码,共 3 处) 2.在 jsp 页面中,添加如下代码 &amp;amp;lt;%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%&amp;amp;gt; 3.修改 tomcat 的 conf 目录的 server.xm...
springMVC 中文乱码问题检查
1. 检查tomcat 配置, 查看编码设置,见粗体 找到 server.xml 中的一下代码,查看一下粗体的设置         enableLookups="false" redirectPort="8443" acceptCount="100"     connectionTimeout="20000" disableUploadTimeout="true" URIEn
解决springMVC 中文乱码问题
在web.xml中引入以下代码 即可 &amp;lt;!--  解决springmvc乱码的问题--&amp;gt;   &amp;lt;filter&amp;gt;   &amp;lt;filter-name&amp;gt;encodingFilter&amp;lt;/filter-name&amp;gt;   &amp;lt;filter-class&amp;gt;org.springframework.web.filter.CharacterEncodingFilte...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview