今天与企查查进行联调,发现一个特殊的情况,我用之前调用的工具类,调用老是报参数为空,很神奇,我之前这个工具类用过很多项目,按道理是不会出现这样的情况。
然后我换了三四个工具类去进行调用,直到找到下面这个工具类才通,在拦截错误的时候 ,需要进行区分400错误 还是服务器错误,不然抛出不了有用信息。
public static StringsendHttpsPost(String url, String requestJson, String token) {
// 构建请求参数
String result ="";
PrintWriter out =null;
BufferedReader in =null;
log.info("请求地址:" + url);
log.info("请求参数:" + requestJson);
try {
trustAllHosts();
URL url2 =new URL(url);
HttpsURLConnection urlCon = (HttpsURLConnection) url2.openConnection();
urlCon.setHostnameVerifier(DO_NOT_VERIFY);
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.setRequestMethod("POST");
urlCon.setRequestProperty("Content-type", "application/json;charset=UTF-8");
if (!StringUtils.isEmpty(token)) {
urlCon.setRequestProperty("Authorization", token);
}
// 发送POST请求必须设置如下两行
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
// 获取URLConnection对象对应的输出流
OutputStream os = urlCon.getOutputStream();
//参数是键值队 , 不以"?"开始
os.write(requestJson.getBytes());
os.flush();
int responseCode = urlCon.getResponseCode();
if (responseCode < HttpURLConnection.HTTP_BAD_REQUEST) {
// 发送请求参数
// 定义BufferedReader输入流来读取URL的响应
in =new BufferedReader(
new InputStreamReader(urlCon.getInputStream()));
String line;
while ((line = in.readLine()) !=null) {
result += line;
}
}else {
// 发送请求参数
// 定义BufferedReader输入流来读取URL的响应
in =new BufferedReader(
new InputStreamReader(urlCon.getErrorStream()));
String line;
while ((line = in.readLine()) !=null) {
result += line;
}
if (!StringUtils.isEmpty(result)) {
JSONObject jsonObject = JSON.parseObject(result);
String message = jsonObject.getString("message");
if (StringUtils.isEmpty(message)){
message = jsonObject.getString("error");
}
throw new BadRequestAlertException(message);
}
}
}catch (IOException e) {
e.printStackTrace();
throw new BadRequestAlertException("解析数据异常");
}finally {// 使用finally块来关闭输出流、输入流
try {
if (in !=null) {
in.close();
}
}catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}