Spring乱码问题解决方案
2023-09-14 09:00:30 时间
请求乱码
GET请求乱码:
原因:请求参数带在url地址上、url地址什么时候解析?
tomcat收到请求对url进行编解码(ISO8859-1)
解决方案:在tomcat的8080端口配置出加上 URIEncoding="utf-8";
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
POST请求乱码:
原因:请求参数是带在请求体
请求体的解码是在第一次获取参数的时候
filter可以用来解决乱码
request.setCharacterEncoding("utf-8")
响应乱码
response.setContentType("text/html;charset=utf-8")
1、tomcat一安装;上手就给server.xml中的8080处加上URIEncoding="utf-8"
2、给项目里面再搞一个filter让他来解决所有的post乱码;
3、SpringMVC自带的一个乱码解决的filter
项目的web.xml中配置:
<!--字符编码的filter一定要放在最前面 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 配置encoding,告诉我们指定的编码格式 --> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <!-- 解决响应乱码 --> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 支持rest的filter --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
在配置里面配置了encoding和forceEncoding
来看看CharacterEncodingFilter的源码,通过request.setCharacterEncoding(this.encoding)和response.setCharacterEncoding(this.encoding)来解决post请求和响应乱码的问题:
public class CharacterEncodingFilter extends OncePerRequestFilter { private String encoding; private boolean forceEncoding = false; public void setEncoding(String encoding) { this.encoding = encoding; } public void setForceEncoding(boolean forceEncoding) { this.forceEncoding = forceEncoding; } @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { //encoding是UTF-8 //forceEncoding位true if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) { request.setCharacterEncoding(this.encoding); if (this.forceEncoding) { response.setCharacterEncoding(this.encoding); } } filterChain.doFilter(request, response); } }
相关文章
- Spring学习笔记(三)——Spring注解开发&spring与Junit整合测试
- Spring学习笔记(五)——JdbcTemplate和spring中声明式事务
- spring boot自动配置原理面试题_Spring boot面试
- 简单介绍一下spring bean的生命周期_Spring bean的生命周期
- 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】
- Spring之注解开发
- 面试题springboot启动流程_Spring boot面试
- 分布式事务saga开源实现_spring分布式事务解决方案
- spring-boot-devtools的作用_maven compiler plugin
- Spring Boot3.0升级,踩坑之旅,附解决方案(二)
- Spring:IOC(2)
- Spring Boot的ORM框架使用(一)
- Spring Cloud Config
- 【愚公系列】2023年04月 Java教学课程 141-Spring MVC框架的异常处理
- spring中bean的配置详解架构师
- Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.B详解编程语言
- spring的IOC 容器管理 Bean详解编程语言
- Spring Boot(三):logback打印日志详解编程语言
- Spring Boot 配置加载顺序详解编程语言
- Spring注解配置详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例详解编程语言
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- Spring Boot(十三):spring boot小技巧详解编程语言
- Spring框架下整合Redis的实现(spring整合redis)
- spring架构利器:JFinal MySQL Spring(jfinalmysql)
- Spring框架致力于搭建基于MSSQL的稳健开发体系(spring mssql)
- 春满活力Redis存储专业解决方案(spring.redis)