方法一:引入自己定义的编码过滤器 处理数据编码问题
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>