欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

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

发布时间:2025/3/20 javascript 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 深入理解Spring MVC Controller返回String类型导致中文乱码的问题。 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

代码

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

调试

  • 在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)
  • 因为返回的是String类型,所以会进入到if (value instanceof CharSequence)的判断中,如下图所示:
  • 然后进入getProducibleMediaTypes方法,获取到producibleMediaTypes,这里能获取到4个mediaType。
  • 做判断,因为contentType为null,会进入getProducibleMediaTypes方法;
  • 根据传进来的值,会进入到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:
  • 接着对10个mediaType遍历判断
    • 判断第一个text/html,符合条件,退出循环。
  • 最后以text/html的格式输出,导致中文乱码:
  • converter.write(outputValue, selectedMediaType, outputMessage);

    《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

    总结

    以上是生活随笔为你收集整理的深入理解Spring MVC Controller返回String类型导致中文乱码的问题。的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。