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");



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值