代码

  • 在Controller层写下如下的测试代码:
     @GetMappingpublic String test() {return "这是一个中文句子";}

调试

  1. 在return返回后,使用调试模式,知道代码会进入到AbstractMessageConverterMethodProcessor类的writeWithMessageConverters方法:
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor#writeWithMessageConverters(T, org.springframework.core.MethodParameter, org.springframework.http.server.ServletServerHttpRequest, org.springframework.http.server.ServletServerHttpResponse)
  1. 因为返回的是String类型,所以会进入到if (value instanceof CharSequence)的判断中,如下图所示:
  2. 然后进入getProducibleMediaTypes方法,获取到producibleMediaTypes,这里能获取到4个mediaType。
  3. 做判断,因为contentType为null,会进入getProducibleMediaTypes方法;
  4. 根据传进来的值,会进入到else if (converter.canWrite(valueClass, (MediaType)null))的判断,最后返回4个值:
0 = {MediaType@12594} "text/plain"
1 = {MediaType@12595} "*/*"
2 = {MediaType@10620} "application/json"
3 = {MediaType@10621} "application/*+json"


6. 遍历 producibleMediaTypes

  • 进入判断,进入getMostSpecificMediaType方法:
      mediaType = (MediaType)var15.next();if (selectedMediaType.isCompatibleWith(mediaType)) {compatibleMediaTypes.add(this.getMostSpecificMediaType(selectedMediaType, mediaType));}
  • 获取到10个compatibleMediaTypes:
  1. 接着对10个mediaType遍历判断
  • 判断第一个text/html,符合条件,退出循环。
  1. 最后以text/html的格式输出,导致中文乱码:
 converter.write(outputValue, selectedMediaType, outputMessage);

深入理解Spring MVC Controller返回String类型导致中文乱码的问题。相关推荐

  1. Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)

    1,Controller 返回值 返回moduleAndView 返回 String 返回void 2,Controller 参数绑定 客户端请求携带的key/value 键值对 绑定到 Contro ...

  2. spring mvc中关于url中传递中文乱码的解决方法

    在传值过程中,也是乱码出现的频繁地.先不说到底是什么场景了,通常常用的方案有如下几个 配置指定的filter <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--><f ...

  3. Spring MVC接口解决GET请求时中文乱码的问题(前台向后台传递参数通过get方法)

    之前项目中的web.xml中的编码设置: <filter><filter-name>CharacterEncoding</filter-name><filte ...

  4. Spring MVC Controller中返回json数据中文乱码处理

    问题 在使用spring MVC Controller的过程中,发现返回到客户端的的中文出现乱码.后台Java代码: @RequestMapping(value = "/upload&quo ...

  5. java注解返回不同消息,Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息...

    Spring MVC Controller中的一个读入和返回都是JSON的方法怎么获取javax.validation注解的错误信息? 本帖最后由 LonelyCoder2012 于 2014-03- ...

  6. [转载]Asp.net MVC中Controller返回值类型

    Asp.net MVC中Controller返回值类型 在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须 ...

  7. Spring MVC Controller 要点

    2019独角兽企业重金招聘Python工程师标准>>> 今天看到一篇讲解 Spring MVC Controller 的文章,比较详细,顺道翻译下. 在 Spring MVC 中,我 ...

  8. spring mvc controller间跳转 重定向 传参

    spring mvc controller间跳转 重定向 传参 1. 需求背景     需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形 ...

  9. 六、Spring MVC之返回数据

    前面几篇文章重点说明了一下怎么从前台传递参数到目标方法,还没有说怎么把结果返回给前台.本篇来讲述一下spring mvc怎么返回结果数据. 从使用形式上看,有以下几种方式:ModelAndView.M ...

最新文章

  1. python any()和all()用法
  2. getrealdays oracle_oracle 日期函数介绍
  3. instanceof用法_「JS很简单」JavaScript 基础之 instanceof操作符
  4. 关于ES6的Promise
  5. docker管理应用程序数据、容器网络
  6. php商品分类添加字段,zblogPHP分类模板添加自定义字段(调用UEditor编辑器输入法)...
  7. stringByReplacingCharactersInRange: withString: 实现字符串删除,替换
  8. asp.net 在repeater控件中加按钮
  9. Webstorm中html无Vue语法提示
  10. python 源码分析 基本篇
  11. 如何成为一名数据分析师
  12. ffmpeg中h264_mp4toannexb使用说明及注意事项
  13. 核心路由器十项性能指标(转)
  14. ubuntu服务器设置定时自动开关机
  15. 轻快PDF阅读器怎么阅读电子书
  16. 单相电枢绕组产生的磁通势
  17. icloud备份微信聊天记录怎么恢复
  18. 2017百度之星资格赛—1003度度熊与邪恶大魔王
  19. Mysql数据库【触发器】
  20. 关于Monkey稳定性测试,这是我看到最详细的文章

热门文章

  1. (chap3 Http报文内的http信息) HTTP报文格式
  2. java结丹期(16)----javaweb(maven(2))
  3. 设计模式--门面(Facade)模式
  4. [HOW TO]-ubuntu20.10搭建openjrok服务指南
  5. 用_beginthreadex不用 CreateThread
  6. CreateThread和CreateRemoteThread
  7. 反击CobaltStrike
  8. 5、Java Swing JButton:按钮组件
  9. 【PAT乙级】1073 多选题常见计分法 (20 分)
  10. 第三章 搜索与图论 【完结】