SpringMVC处理中文乱码

方法一:引入自己定义的编码过滤器 处理数据编码问题

1.写一个处理编码问题的过滤器类
分为EncodingRequest和LoginFileter

//EncodingRequest下的内容:
package com.zhm.util;

import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

// 处理请求数据中的编码
public class EncodingRequest extends HttpServletRequestWrapper {
	HttpServletRequest request;
	public EncodingRequest(HttpServletRequest request) {
		super(request);
		this.request=request;//你处理哪个request 就把那个request 传递过来
	} 
	
	public String getParameter(String name) {
		//加工处理 request   分请求方式  get  post
		 String method = request.getMethod();
		 if("GET".equals(method)){
			 //get请求方式
			 String shuju = request.getParameter(name);
			 //shuju要处理的 请求中的值 
			 try {
				 if(shuju != null && !"".equals(shuju)){
					String newStr =new String(shuju.getBytes("iso-8859-1"),"utf-8");
					return newStr;
				 }
			 } catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		 }
		 if("POST".equals(method)){
			 //post请求
			 try {
				request.setCharacterEncoding("utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		 }
		return super.getParameter(name);
	}
	// 处理数据 
	 public String[] getParameterValues(String name){
			String[] values=super.getParameterValues(name);
			if(values!=null){
				for (int i = 0; i < values.length; i++) {
					try {
						values[i]=new String(values[i].getBytes("ISO-8859-1"),"utf-8");
					} catch (UnsupportedEncodingException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			return values;
		}
}


//LoginFileter下的内容:
package com.zhm.util;

import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.filter.OncePerRequestFilter;

// 过滤器  登录权限的验证   中文的编码处理   请求的
public class LoginFileter extends OncePerRequestFilter{
	// 过滤方法
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain chain)
			throws ServletException, IOException {
		// 把所有的请求都走一遍  编码处理类  EncodingRequest
		EncodingRequest req= new EncodingRequest(request);
		//req 处理了编码之后的 请求 
		chain.doFilter(req, response);// 放行
	}
}

2.写完这个上述的两个类后,然后在wen.xml文件中进行配置
上述例子中的类放在了 com.zhm.util包下,可以根据自己需求进行修改

<!--  引入自己定义的编码过滤器 处理数据编码问题 -->
<filter>
  	<filter-name>charset</filter-name>
  	<filter-class>com.zrgk.util.LoginFileter</filter-class>
</filter>
  <filter-mapping>
	<filter-name>charset</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

方法二 编码过滤器 springMVC 自带的 只支持 post 请求 get 请求不支持 可以通过修改 tomcat 配置

在web.xml文件中进行配置

<filter>
	<filter-name>charset</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>
</filter>
  <filter-mapping>
	<filter-name>charset</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

然后在applicationContext中进行配置:

 <!-- 启动springMVC的注解方式 -->
	    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	           <property name="messageConverters">
	            <list>
	                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
	                    <property name="supportedMediaTypes">
	                        <list>
	                            <value>text/html; charset=UTF-8</value>
	                            <value>application/json;charset=UTF-8</value>
	                        </list>
	                    </property>
	                </bean>
	            </list>
	        </property>
	    </bean>
				
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值