广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot参数传中文乱码的解决方案
  • 646
分享到

springboot参数传中文乱码的解决方案

2024-04-02 19:04:59 646人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言业务部门的实现思路方案一:方案二:编写字符编码过滤器方案三:在application.yml指定编码格式为utf-8方案四:写个StringHttpMessageConver

前言

本文案例来自业务部门的一个业务场景。他们的业务场景是他们部门研发了一个微服务上下文透传组件,其透传原理也挺简单的,就是通过SpringBoot拦截器把请求参数塞进threadlocal,然后下游通过threadlocal取到值,服务之间进行feign调用时,再把threadlocal的参数塞到header头里面。这个组件一直用得好好的,突然有一天因为传的参数值是中文,导致乱码。他们通过尝试下面的各种方案,都无法解决。最后就让我们部门排查处理。

业务部门的实现思路

他们一开始的思路方向是参数编码不一致导致中文乱码。于是他们就朝这个方向努力着,于是就有了如下方案

方案一:


String value = new String("我是中文乱码".getBytes("ISO-8859-1"),"UTF-8");

这个是常用解决字符串中文乱码的方法之一

方案二:编写字符编码过滤器


@WEBFilter(urlPatterns = "/*",filterName = "CharacterEncodingFilter")
public class CharacterEncodingFilter implements Filter{
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
 
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 httpservletRequest request = (HttpServletRequest) servletRequest;
 HttpServletResponse response = (HttpServletResponse) servletResponse;
 request.setCharacterEncoding("UTF-8");
 response.setCharacterEncoding("UTF-8");
 
 filterChain.doFilter(request , response);
 }
 @Override
 public void destroy() {
 }
}

然后启动类上加上@ServletComponentScan。@WebFilter是servlet3.0才有的注解。当然这个过滤器你还可以这么写


public class CharacterEncodingFilter implements Filter{
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
 
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 HttpServletRequest request = (HttpServletRequest) servletRequest;
 HttpServletResponse response = (HttpServletResponse) servletResponse;
 request.setCharacterEncoding("UTF-8");
 response.setCharacterEncoding("UTF-8");
 
 filterChain.doFilter(request , response);
 }
 @Override
 public void destroy() {
 }
}

然后启动类上加上@ServletComponentScan。@WebFilter是servlet3.0才有的注解。当然这个过滤器你还可以这么写


public class CharacterEncodingFilter implements Filter{
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
 
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 HttpServletRequest request = (HttpServletRequest) servletRequest;
 HttpServletResponse response = (HttpServletResponse) servletResponse;
 request.setCharacterEncoding("UTF-8");
 response.setCharacterEncoding("UTF-8");
 
 filterChain.doFilter(request , response);
 }
 @Override
 public void destroy() {
 }
}

写个bean配置类,如下


 @Bean
 public FilterReGIStrationBean registerAuthFilter() {
 FilterRegistrationBean registration = new FilterRegistrationBean();
 registration.setFilter(new CharacterEncodingFilter();
 registration.addUrlPatterns("/*");
 registration.setName("CharacterEncodingFilter");
 registration.setOrder(1); 
 return registration;
 }

方案三:在application.yml指定编码格式为utf-8


spring:
 http:
 encoding:
 charset: utf-8
 enabled: true
 force: true

server:
 Tomcat:
 uri-encoding: UTF-8

方案四:写个StringHttpMessageConverter

百度来的基本上都是长这样。不过在spring5版本WebmvcConfigurerAdapter这个类已经过时。其替代方式是实现WebMvcConfigurer接口或者继承WebMvcConfigurationSupport。不过如果使用WebMvcConfigurationSupport,则会使springboot的mvc自动装配失效。失效的原因是

拓展一点小知识,加上@EnableWebMvc同样也会springboot的mvc自动装配失效。其原因是

org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration这个配置类继承WebMvcConfigurationSupport

介绍那么多种方案,并没有解决按例的问题。那问题点出在哪里?前边案例我们提到过,在feign调用时,会把threadlocal的参数塞到header里面。真正乱码的问题点就在这里,header是不支持中文传输的,如果你硬要传输,基本上接收方接到就是???这种看似乱码的符号

破题关键

在把threadlocal的值塞到header里面时,先做下URLEncoder编码,形如


URLEncoder.encode(“我是中文乱码”,"UTF-8")

在接收header参数时,做下URLDecoder.解码,形如下


URLDecoder.decode(header中待解码的参数值, "UTF-8")

总结

方向错了,虽然再怎么努力看似也啥没卵用,不过至少可能会收获其他意想不到的东西

以上就是springboot参数传中文乱码的解决方案的详细内容,更多关于springboot参数传中文乱码的资料请关注编程网其它相关文章!

--结束END--

本文标题: springboot参数传中文乱码的解决方案

本文链接: https://www.lsjlt.com/news/122275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot参数传中文乱码的解决方案
    目录前言业务部门的实现思路方案一:方案二:编写字符编码过滤器方案三:在application.yml指定编码格式为utf-8方案四:写个StringHttpMessageConver...
    99+
    2022-11-11
  • Base64:含中文参数转码,对方接受参数解码后,中文信息乱码的解决方案
    Base64:含中文参数转码,对方接受参数解码后,中文信息乱码的解决方案 前言一、Base64是什么?二、问题解决总结 前言 在用Postman调接口给对方发参数的时候,对方反应含中文参数的字段信息部分乱码(即中文乱码,数字等...
    99+
    2023-08-17
    java spring boot
  • Ajax传递中文参数到后台乱码的解决方法
    这篇文章主要讲解了“Ajax传递中文参数到后台乱码的解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ajax传递中文参数到后台乱码的解决方法”吧! ...
    99+
    2022-10-19
  • js解决url传递中文参数乱码问题的方法详解
    目录场景复现:bug解决思路:url传参中文乱码的解决方法1、escape 和 unescape2、encodeURI 和 decodeURI3、encodeURIComponent...
    99+
    2023-05-19
    js中url中文乱码 js url传参中文乱码 js url 中文乱码
  • SpringMVC 中文乱码的解决方案
    目录背景解决方案使用自己写的过滤器使用SpringMVC提供的过滤器如果上面两种方法还实现不了,在试试以下这个方法,大神编写的背景 举个例子,出现中文乱码的例子:提交表单的时候。 表...
    99+
    2022-11-12
  • MySQL数据库中的中文乱码解决方案。
    数据库中输入中文容易出现乱码?(乱码问题本源:参见https://blog.51cto.com/12042068/2115021)解决方法:1.在建表建库的时候就指定默认编码  utf8.&nbs...
    99+
    2022-10-18
  • java中文参数乱码怎么解决?
    java中文参数乱码的解决方法【方法一】后端接收参数时转码String fileName = new String (fileName.getBytes("ISO8859-1"),"utf-8");【方法二】修改tomcat安装目录下的se...
    99+
    2017-11-06
    java入门 java
  • php如何解决url中文传参乱码问题
    本篇内容主要讲解“php如何解决url中文传参乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何解决url中文传参乱码问题”吧!php解决url中文传参乱码问题的方法:1、使用ur...
    99+
    2023-06-22
  • php怎么解决url中文传参乱码问题
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。php怎么解决url中文传参乱码问题?php url地址栏传中文乱码解决方法集合php地址栏传中文$_GET下来后乱码,urlencode和urldecode用法详解u...
    99+
    2018-12-07
    php url 中文乱码
  • MYSQL中文乱码问题的解决方案
    目录一、乱码的原因:二、查看数据库的编码方式三、解决的办法有俩种:四、本人在项目遇到乱码问题是以下方法解决的总结一、乱码的原因: 1、 client客户端的编码不是utf8 2、server端的编码不是utf8 3、da...
    99+
    2022-06-13
    mysql中文乱码解决方法 中文存入mysql乱码 数据库中文乱码
  • R语言 中文乱码的解决方案
    问题背景 在R Studio中重新载入之前编辑好的.r文件,结果发现内容中的所有中文都乱码了。 问题解决 在R Studio中选择菜单栏File->Reopen with En...
    99+
    2022-11-12
  • Postman返回中文乱码的解决方案
    目录问题如下:解决方案 IDEA中在网上找了很多资料,但是一直没有实际效果,现在终于搞定 问题如下:   用的post请求,然后入参格式为json 并且入参中...
    99+
    2022-11-12
  • MySQL中文乱码问题解决方案
    linux 中 MySQL 出现中文乱码问题如下操作 编辑vi /etc/my.cnf 文件,添加图中标记三行 [client] default-character-set=utf8 [mysqld] chara...
    99+
    2022-05-17
    MySQL 中文乱码
  • php传递post参数乱码如何解决
    这篇文章主要介绍“php传递post参数乱码如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php传递post参数乱码如何解决”文章能帮助大家解决问题。php传递post参数乱码的解决办法:1...
    99+
    2023-07-04
  • php url参数中文乱码如何解决
    这篇“php url参数中文乱码如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php url参数中文乱码如何解决”文...
    99+
    2023-07-04
  • putty登录CentOS中文乱码的解决方案
    这篇文章主要介绍“putty登录CentOS中文乱码的解决方案”,在日常操作中,相信很多人在putty登录CentOS中文乱码的解决方案问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”putty登录CentOS...
    99+
    2023-06-10
  • C#newtonsoft.json中文乱码问号的解决方案
    目录C# newtonsoft.json中文乱码问号C# NewtonJson使用技巧C# newtonsoft.json中文乱码问号 发送方在序列化json时这样写,比如将game...
    99+
    2022-11-13
  • linux下python中文乱码解决方案详解
    1. 场景描述 linux服务器下安装了Anaconda3,执行Pyhton的K-means算法,结果出现如下图的中文字符乱码。上次已经解决了,忘记记录解决流程了,这次配置了一台新的服务器,又出现,默认不配置的话mat...
    99+
    2022-06-04
    linux python 中文乱码 解决方案
  • 解决js传中文参数到java后台出现乱码问题
    在js中传中文到java后端时,参数中有中文时,后端获取到的值是乱码。解决方法如下:先在js中传值时把参数编码,然后再传值到后端var userName=encodeURI(userName);在后端获取该值后,再用进行解码userName...
    99+
    2017-10-25
    java基础 解决 java 中文参数 问题 js
  • java中url传中文时乱码的解决方法
    Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题。推...
    99+
    2015-07-15
    java 乱码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作