SpringMVC乱码过滤器配置
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <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>
上诉方式只对post请求有效
如需要对get 全局请求有效,一种方式修改Tomcat server.xml文件
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" uRIEncoding="UTF-8"/>
另一种自定义利用包装类来过滤 或者动态代理
贴一下Warper方式
/** * * 版权所有 All Rights Reserved 需改成动态代理(AOP)方式 * * @author Irving * @date 2013年2月15日2:44:23 * @version 1.0.0 * @email zhouyongtao@outlook.com */ public class CharacterEncodingFilter implements Filter { private FilterConfig config; private String defaultCharset = "UTF-8"; private static Logger logger = LogManager.getLogger("CharacterEncodingFilter"); public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { String charset = this.config.getInitParameter("encoding"); if (charset == null) { charset = defaultCharset; } HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding(charset); response.setCharacterEncoding(charset); response.setContentType("text/html;charset=" + charset); chain.doFilter(new MyRequest(request), response); } class MyRequest extends HttpServletRequestWrapper { private HttpServletRequest request; public MyRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getParameter(String name) { String value = this.request.getParameter(name); if (!request.getMethod().equalsIgnoreCase("get")) { return value; } if (value == null) { return null; } try { return value = new String(value.getBytes("iso8859-1"), request.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } public void destroy() { } public void init(FilterConfig filterConfig) throws ServletException { logger.info("========== 启用解决全站乱码Filter ======="); this.config = filterConfig; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述