Tomcat设置URIEncoding默认编码为UTF-8时正确解析GBK参数

做项目的时候,对方所有接口都是以GET方式发送GBK进行URLEncode之后的参数,例如:

http://127.0.0.1/zmall/addSupProduct.do?name=%ca%a2%b4%f3-%c8%c8%d1%aa%b4%ab%c6%e6-%b0%b4%d4%aa

%b3%e4&partnerId=1034&parvalue=1.0000&productType=2&sign=75585d8a473f4b7b51ec1223e1c38eb7&supProductId=1001&ts=1392616179&unitPrice=0.9120

由于tomcat设置URIEncoding="UTF-8",所有在执行下面的代码时,会自动用UTF-8编码进行URLDecoder解码:

request.getParameter("key")

这样一来,就别想再转码回去了。(本人能力有限。。。)


所以,想了一个笨方法,获取request的queryString,然后对其进行解码;

import java.net.URLDecoder;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

public class HttpParamUtil {
	
	private HttpServletRequest req;
	
	private HashMap<String,String> params;
	
	public HttpParamUtil(HttpServletRequest req){
		this.req = req;
		
		try{
			//只解析GET提交的数据
			if("GET".equals(req.getMethod())){
				params = new HashMap<String, String>();
				//解析queryString
				String queryString = req.getQueryString();
				String[] ps = queryString.split("&");
				String[] p = null;
				for(String param : ps){
					p = param.split("=");
					params.put(p[0], URLDecoder.decode(p[1], "GBK"));
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
	
	public String getParameter(String key){
		
		if(params != null){
			return params.get(key);
		}else{
			return "";
		}
	}
	
	
	
}


调用如下:

//解析request数据
		HttpParamUtil http = new HttpParamUtil(req);
	
		String partnerId = http.getParameter("partnerId");



相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页