做项目的时候,对方所有接口都是以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");