使用resteasy的乱码问题
使用resteasy的乱码问题
使用resteasy的乱码问题
系统统一采用utf-8编码。一般遇到乱码问题,都需要做如下1、2、3步操作:
1、jsp页面设置编码
<% page language=”java” contentType=”text/html;
charset=UTF-8”%>
<meta http-equiv=”Content-Type” content=”text/html;
charset=UTF-8”>
2、tomcat的url编码:
<Connector connectionTimeout=”20000” port=”8080”
protocol=”HTTP/1.1” redirectPort=”8443” URIEncoding=”UTF-8”/>
3、mysql的编码:
<property name=”url”
value=”jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8” />
针对resteasy:
一,提交过程的乱码
建立设置一个filter,
设置提交的编码:request.setCharacterEncoding(“utf-8”);
(主要针对POST提交请求,GET提交走的是url)
二,返回过程中的乱码
方法1:在方法上加: Produces(“text/plain; charset=utf-8”)
方法2:采用resteasy的intercepter,建立一个 PostProcessInterceptor,在里面对编码进行统一处理:
MultivaluedMap<String, Object> map = response.getMetadata(); \
List<Object> contentType = map.get(“Content-Type”);
if (contentType.size() > 0) {
String c = ((MediaType) contentType.get(0)).toString();
if (c.contains(“charset”)) {
c = c.split(“;”)[0] + “;” + “charset=\“UTF-8\“”;
} else {
c = c + “;” + “charset=\“UTF-8\“”;
}
map.remove(“Content-Type”);
map.add(“Content-Type”, c);
}
\
针对返回过程中的乱码,在filter中设置编码不起作用,应该是resteasy根据客户端的请求编码(
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3)已经完成了GBK的编码,所以再次设置为utf-8不起作用。
\
说明:如果返回的格式是application/json,默认的编码是utf-8的,所以不会是乱码。jquery发起的请求也是utf-8的