封装了一个方法用于http请求,使用类来继承ResDAO来封装json返回对象。
如果请求的token过期了,返回状态码是403就可以进行重新获取token再次进去远端接口。
private ResDAO getSendInstructResult(String url, Object object, TokenDAO tokenDTO,
Class<? extends ResDAO> clazz) {
Map<String, String> header = new HashMap<>();
if(tokenDTO != null){
header.put("token", tokenDTO.getToken());
}
JSONObject jsonObject = (JSONObject) JSON.toJSON(object);
String jsonStr = SingletonHttpClient.getInstance().doPostJson(url, header, jsonObject);
if (jsonStr == null) {
log.error("请求处理失败:url:{},jsonObject:{}",url,jsonObject);
throw new RuntimeException("请求处理失败");
}
ResDAO res = JSON.parseObject(jsonStr, clazz);
//返回结果403重新获取token发送请求
if(tokenDTO != null && "403".equals(res.getRtnCode()) && !tokenDTO.isFlag()){
//直接请求获取token
String token = null;//getTokenFromAcqSys();
tokenDTO.setToken(token).setFlag(true);
//放入缓存
//redisUtil.set(COLLECT_SYS_TOKEN_KEY, token, TIMEOUT_TOKEN);
return getSendInstructResult(url, object, tokenDTO,clazz);
}
return res;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class ResDAO {
String rtnMsg;
String rtnCode;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class TokenDAO {
private String token;
//是否获取的最新token true是
private boolean flag;
}
http单例工具类: