像这种是既有url参数,又有json参数嘛,应该要怎么传参
url参数,直接拼接在微信第三方接口上。其他参数用map集合封装,然后借助第三方json工具,将map转为json。
url拼接一部分,post里面表单提交一部分
如下配置请求:
post请求,post部分封装好Map转json,get部分参数直接拼接在url上
第一步,引入一个工具包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
第二步,写请求的代码
模仿官方文档里面这个例子:https://www.hutool.cn/docs/#/http/Http客户端工具类-HttpUtil
完整代码:
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import java.util.HashMap;
import java.util.Map;
import static cn.hutool.core.net.url.UrlBuilder.ofHttp;
import static cn.hutool.http.HttpRequest.post;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Test {
public static void main(String[] args) {
// url https://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token=ACCESSTOKEN
Map<String, String> headMap = new HashMap<>();
headMap.put("Content-Type", "application/json");
headMap.put("Accept", "application/json");
Map<String, Object> params = new HashMap<>();
params.put("openid", "这里写你的openid");
params.put("real_name", "这里写你的real_name");
HttpResponse response = post(ofHttp("https://api.weixin.qq.com", UTF_8).addPath("intp").addPath("realname").addPath("checkrealnameinfo").addQuery("access_token", "这里写你的access_token").build())
.headerMap(headMap, true)
.timeout(60 * 1000)
.body(JSONUtil.parseObj(params).toString())
.execute();
if (response.isOk()) {
String body = response.body();
System.out.println(body);
}
}
}
post 参数你直接传到请求体,url后的token参数,你拼接字符串
public static String doPost(String url, String charSet, Map<String, Object> map, Map<String, Object> headers) {
logger.debug("http post visit url:" + url + ", params:" + map);
try {
// OkHttpClient mHttpClient = new OkHttpClient.Builder().build();
Request request = BulidPostRequest(url, map, headers);
Response response = mHttpClient.newCall(request).execute();
if (response != null && response.isSuccessful()) {
String out = response.body().string();
return out;
}
} catch (Exception e) {
log.error("doPost ", e);
}
return "error";
}
pom我这里引用的是okhttp,
<dependency>
<artifactId>okhttp</artifactId>
<name>OkHttp</name>
<version>3.11.0</version>
</dependency>
public static String postJsonData(String jsonParam, String urls) {
StringBuilder sb = new StringBuilder();
try {
// 创建url资源
URL url = new URL(urls);
// 建立http连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置连接时间为5秒
//conn.setConnectTimeout(5*1000);
//设置读取时间为5秒
//conn.setReadTimeout(5*1000);
// 设置允许输出
conn.setDoOutput(true);
// 设置允许输入
conn.setDoInput(true);
// 设置不用缓存
conn.setUseCaches(false);
// 设置传递方式
conn.setRequestMethod("POST");
// 设置维持长连接
conn.setRequestProperty("Connection", "Keep-Alive");
// 设置文件字符集:
conn.setRequestProperty("Charset", "UTF-8");
// 转换为字节数组
byte[] data = jsonParam.getBytes();
// 设置文件长度
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
// 设置文件类型:
conn.setRequestProperty("contentType", "application/json");
conn.setRequestProperty("Accept", "application/json");
// 开始连接请求
conn.connect();
OutputStream out = new DataOutputStream(conn.getOutputStream()) ;
// 写入请求的字符串
out.write(jsonParam.getBytes());
out.flush();
out.close();
// 请求返回的状态
if (HttpURLConnection.HTTP_OK == conn.getResponseCode()){
//System.out.println("连接成功");
// 请求返回的数据
InputStream in1 = conn.getInputStream();
try {
String readLine;
BufferedReader responseReader=new BufferedReader(new InputStreamReader(in1, StandardCharsets.UTF_8));
while((readLine=responseReader.readLine())!=null){
sb.append(readLine).append("\n");
}
responseReader.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
Map<String, String> params = new HashMap<>();
params.put("openid", openid参数值);
.......
/*post请求*/
String result = postJsonData(JSON.toJSONString(params), "https://http://api.weixin.qq.com/intp/realname/checkrealnameinfo?access_token="+你的ACCESSTOKEN);
post请求的时候,本身是可以携带Json的对吧,然后你可以再在接口地址后面拼接参数,这样不就达成要求了么