配置超时时间
package com.rjgf.sso.other.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* @author
* @date 2022/10/14 9:58
* @remark RestTemplate配置
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
//1000ms*15 15s
factory.setReadTimeout(1000*15);
factory.setConnectTimeout(1000*15);
return factory;
}
}
自动注入
依赖包
@Autowired
private RestTemplate restTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.*;
1.POST请求
package com.rjgf.common.core.utils.rest;
import com.alibaba.fastjson.JSONObject;
import com.rjgf.common.core.constant.HttpStatus;
import com.rjgf.common.core.exception.base.BaseException;
import com.rjgf.common.core.web.domain.AjaxResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.client.RestTemplate;
/**
* @author
* @date 2022/10/26 16:49
* @remark
*/
@Component
public class RestInnerServerUtils {
private static final Logger log = LoggerFactory.getLogger(RestInnerServerUtils.class);
@Autowired
private RestTemplate restTemplate;
/**
* 发起rest请求
*
* @param url 路径
* @param params 请求参数
* @return URL
*/
public Object post(String url, JSONObject params) {
//请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//发起请求 String代表发送的类型,这里使用jsonStr,网上很多博客一个抄一个,用LinkedMultiValueMap、MultiValueMap作为参数传递,现在绝大数项目用json格式,接受会导致参数错误
HttpEntity<String> httpEntity = new HttpEntity<>(params.toJSONString(), headers);
//AjaxResult是返回类型,我知道返回类型,如果不确定返回类型,使用String接受,用fastjson处理Json字符串
ResponseEntity<AjaxResult> responseEntity = restTemplate.exchange(
url,
HttpMethod.POST,
httpEntity,
AjaxResult.class);
return getObject(responseEntity);
}
/**
* 发起rest请求
*
* @param url 路径
* @return URL
*/
public Object get(String url) {
//请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//将参数和请求头放入实体 参数用jsonStr
HttpEntity<String> httpEntity = new HttpEntity<>(null, headers);
ResponseEntity<AjaxResult> responseEntity = restTemplate.exchange(
url,
HttpMethod.GET,
httpEntity,
AjaxResult.class);
return getObject(responseEntity);
}
private Object getObject(ResponseEntity<AjaxResult> responseEntity) {
if (!responseEntity.getStatusCode().is2xxSuccessful()) {
log.info("验证服务器状态码不为200");
throw new BaseException("获取token失败");
}
AjaxResult ajax = responseEntity.getBody();
if (ObjectUtils.isEmpty(ajax)) {
throw new BaseException("响应体不能为空");
}
if (HttpStatus.SUCCESS != (int) ajax.get(AjaxResult.CODE_TAG)) {
throw new BaseException((String) ajax.get(AjaxResult.MSG_TAG));
}
return ajax.get(AjaxResult.DATA_TAG);
}
}