我有这么一段json
{
"taskId":123456789,
"taskName": "123",
"didNumbers": [
"12345678",
"12345679"
],
"reTellConf": {
"interval": 1,
"count": 2,
"condition": {
"replyStatusList": [
"001",
"002",
"003",
"004"
],
"executeTimeInterval": [
{
"startTime": "00: 00: 00",
"endTime": "23: 59: 59"
}
],
"blacklistGroups": []
}
}
}
有没有兄弟能放进 HttpServletRequest request,我想看下request.getParameter(“reTellConf”) 的输出?
因为我想用c#的.GetMemberValue(key),获取所有value,所以想知道java的这个方法的输出是啥样的,我好实现
以上,多谢
不知道你这个问题是否已经解决, 如果还没有解决的话:以上就是事情的起因,期初我的建议是他们那边能不能换成 json 格式的接收,我们这边直接发送 json 格式的数据,这样应该不会有问题,但是他们死活不愿意改。
后续方案是我们将参数中的 & 进行 URL 编码,将其转化为 %26。
我们实现的方法大概如下:
public String pay(String url, Map<String, String> params) {
URL u = null;
HttpURLConnection con = null;
// 构建请求参数
StringBuffer sb = new StringBuffer();
String strResult = null;
if (params != null) {
for (Entry<String, String> e : params.entrySet()) {
sb.append(e.getKey());
sb.append("=");
sb.append(e.getValue());
sb.append("&");
}
strResult = sb.substring(0, sb.length() - 1);
}
// 尝试发送请求
try {
u = new URL(url);
con = (HttpURLConnection) u.openConnection();
// POST 只能为大写,严格限制,post会不识别
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
osw.write(sb.toString());
osw.flush();
osw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
con.disconnect();
}
}
// 读取返回内容
StringBuffer buffer = new StringBuffer();
try {
//一定要有返回值,否则无法把请求发送给server端。
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String temp;
while ((temp = br.readLine()) != null) {
buffer.append(temp);
}
} catch (Exception e) {
logger.error("*****报错:", e);
}
return buffer.toString();
}
改造为:
String value = e.getValue();
if (value.contains("&")) {
try {
// URL编码,针对“&”进行处理,防止截取参数不完整导致验签失败
value = URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
sb.append(value);