springboot Http交互后端模板
@Service
@Slf4j
@Profile("xxxxx")
public class MesHttpRestTemplate {
private final RestTemplate restTemplate;public MesHttpRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Async
public void sendByHttp(SendInfo sendInfo) {
log.info("requestLsExit body:{}", sendInfo);
ResponseBean responseBean = this.postRequest(sendInfo.getUrl(), sendInof, ResponseBean.class);
log.info("requestLsExit McsResponse:{}", responseBean);
}
/**
* http POST请求
*
* @param api 非空,api资源访问路径,即( /path1/path2 ),不包含IP部分
* @param id 待替换api中的{id}的值
* @param body post请求内容
* @param clazz 非空,返回类型
* @return 返回response body, 异常上层处理
* @throws BusinessException
*/
<T> T postRequest(String api, String id, Object body, Class<T> clazz) {
Objects.requireNonNull(api);
Objects.requireNonNull(clazz);
api = api.trim();
if (StringUtils.isNotEmpty(id)) {
api = api.replace(FmsApiConstant.ID, id);
}
try {
try {
return restTemplate.exchange(api, HttpMethod.POST, new HttpEntity<>(body, getHeaders()), clazz).getBody();
} catch (ResourceAccessException e) {
log.warn("Cannot access mes, please check network or url {}", e.toString());
synchronized (this) {
try {
this.wait(3000);
} catch (InterruptedException ex) {
// ignore
}
}
// 连接失败时,重试一次
return restTemplate.exchange(api, HttpMethod.POST, new HttpEntity<>(body, getHeaders()), clazz).getBody();
}
} catch (ResourceAccessException e) {
//无法连接
} catch (RestClientException e) {
//访问出错
}
}
/**
* http POST请求 重载方法
*
* @param api
* @param body
* @param clazz
* @param <T>
* @return
*/
public <T> T postRequest(String api, Object body, Class<T> clazz) {
return postRequest(api, null, body, clazz);
}
/**
* 获取报文头信息
*
* @return
*/
private HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, "application/json");
return headers;
}
}
ResponseBean
/**
* @ClassName ResponseBean
* @Description 操作成功返回实体
**/
@Data
public class ResponseBean<T> {
private int code;
private String msg;
private T data;
public ResponseBean(){};
public static ResponseBean success() {
return new ResponseBean(200, "success");
}public static <T> ResponseBean success(T data) {
return new ResponseBean<>(200, null, data);
}
}

浙公网安备 33010602011771号