本人在做接口测试的过程中,之前写了一个用字符串替换的方法来处理get接口的参数拼接,后来优化了这个方法,兼容了中文字符提示非法字符的情况,使用了java自带的urlencode方法。包括第一种方法,之前传的是json。分享代码,供大家参考。


更新:

   /**
* 方法已重载,获取get对象
* <p>方法重载,主要区别参数,会自动进行urlencode操作</p>
*
* @param url 表示请求地址
* @param args 表示传入数据
* @return 返回get对象
*/

public static HttpGet getHttpGet(String url, JSONObject args) {
if (args == null || args.size() == 0)
return getHttpGet(url);
String uri = url + changeJsonToArguments(args);
return getHttpGet(uri.replace(" ", ""));
}

/**
* 方法已重载,获取get对象
* <p>方法重载,主要区别参数,会自动进行urlencode操作</p>
*
* @param url 表示请求地址
* @param args 表示传入数据
* @return 返回get对象
*/
public static HttpGet getHttpGet(String url) {
return new HttpGet(url);
}

其中changjsontoarguments方法如下:

/**
* 把json数据转化为参数,为get请求和post请求stringentity的时候使用
*
* @param argument 请求参数,json数据类型,map类型,可转化
* @return 返回拼接参数后的地址
*/
public static String changeJsonToArguments(JSONObject argument) {
Set<String> keys = argument.keySet();
for (String key : keys) {
String value = argument.getString(key);
argument.put(key, urlEncoderText(value));
}
String one = argument.toString();
String two = "?" + one.substring(1, one.length() - 1).replace(",", "&").replace(":", "=").replace("\"", "");
return two;
}

--------------------------分割线------------------------------

   /**
* 把json数据转化为参数,为get请求和post请求stringentity的时候使用
*
* @param argument
* 请求参数,json数据类型,map类型,可转化
* @return 返回拼接参数后的地址
*/
@SuppressWarnings("unused")
private String changeJsonToArguments(JSONObject argument) {
String one = argument.toString();
String two = "?" + one.substring(1, one.length() - 1).replace(",", "&").replace(":", "=").replace("\"", "");
return two;
}


private String changeJsonToArguments(Map<String, String> apiCase) {
Set<String> keys = apiCase.keySet();
StringBuffer arg = new StringBuffer("?");
for (String key : keys) {
arg.append((key) + "=" + urlEncoderText(apiCase.get(key)) + "&");
}
return arg.deleteCharAt(arg.length() -1).toString();//此处为了兼容case内容为空
}
/**
* 把json数据转化为参数,为get请求和post请求stringentity的时候使用
*
* @param argument
* 请求参数,json数据类型,map类型,可转化
* @return 返回拼接参数后的地址
*/
@SuppressWarnings("unused")
private String changeJsonToArguments(JSONObject argument) {
String one = argument.toString();
String two = "?" + one.substring(1, one.length() - 1).replace(",", "&").replace(":", "=").replace("\"", "");
return two;
}


private String changeJsonToArguments(Map<String, String> apiCase) {
Set<String> keys = apiCase.keySet();
StringBuffer arg = new StringBuffer("?");
for (String key : keys) {
arg.append((key) + "=" + urlEncoderText(apiCase.get(key)) + "&");
}
return arg.deleteCharAt(arg.length() -1).toString();//此处为了兼容case内容为空
}
    /**
* url进行转码,常用于网络请求
*
* @param text
* 需要加密的文本
* @return 返回加密后的文本
*/
public String urlEncoderText(String text) {
String result = "";
try {
result = java.net.URLEncoder.encode(text, "utf-8");
} catch (UnsupportedEncodingException e) {
output("数据格式错误!");
e.printStackTrace();
}
return result;
}