//实现restTemplate接口
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
RestTemplate restTemplate = restTemplateBuilder
.setReadTimeout(Duration.ofSeconds(6))
.setConnectTimeout(Duration.ofSeconds(3))
.build();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if (httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(CharsetUtil.charset(“UTF-8”));
break;
}
}
return restTemplate;
}
}
//工具类
@Component
public class RestTemplateUtil {
@Autowired
private RestTemplate restTemplate;
private final static Logger logger = LoggerFactory.getLogger(RestTemplateUtil.class);
/**
* restTemplate发送get请求,无参数
* @param url 请求地址
* @param clazz 返回对象类型
* @return
*/
public <T> T httpGet(String url,Class<T> clazz){
logger.info("httpget reqquesturl is {}",url);
ResponseEntity<T> response =restTemplate.getForEntity(url, clazz);
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
/**
* restTemplate发送get请求,参数是key value形式
* @param url 请求地址
* @param reqParmas 请求参数的key和value
* @param clazz 返回对象类型
* @return
*/
public <T> T httpGet(String url,Map<String,Object> reqParmas,Class<T> clazz){
logger.info("httpget reqquesturl is {}",url);
ResponseEntity<T> response =restTemplate.getForEntity(url, clazz);
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
/**
* restTemplate发送get请求,传参形式为指定占位符
* @param url 示例 http://HELLO-SERVICE/sayhello?name={1}
* @param uriVariables "张三"
* @param clazz 返回对象类型
* @return
*/
public <T> T httpGet(String url,Class<T> clazz,Object... uriVariables){
logger.info("httpget reqquesturl is {}",url);
ResponseEntity<T> response =restTemplate.getForEntity(url, clazz,uriVariables);
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
/**
* restTemplate发送get请求,获取地址下载流
* @param url 示例 http://10.182.243.155:7003/ImgQuery/imaget/202002/04/26/C02/C020400/NJ/NW00C020400001587886324742.PDF
* @return
*/
public InputStream httpGet(String url){
logger.info("httpget reqquesturl is {}",url);
HttpHeaders headers = new HttpHeaders();
List list = new ArrayList<>();
list.add(MediaType.valueOf("application/pdf"));
headers.setAccept(list);
ResponseEntity<byte[]> response = restTemplate.exchange(
url,
HttpMethod.GET,
new HttpEntity<byte[]>(headers),
byte[].class);
byte[] result = response.getBody();
return new ByteArrayInputStream(result);
}
/**
* restTemplate 发送自定义header的请求,,默认已设置contentType:application/json;charset=UTF-8
* @param url 请求地址
* @param header header的key&value
* @param reqJson 请求对象json
* @param clazz 返回对象类型
* @param <T>
* @return
*/
public <T> T httpPost(String url, Map<String,String> header,String reqJson,Class<T> clazz){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
if(!CollectionUtils.isEmpty(header)){
for(String key:header.keySet()){
headers.set(key, header.get(key));
}
}
HttpEntity<String> entity = new HttpEntity<String>(reqJson, headers);
logger.info("httppost request begin ,url is {},header is {},requestjson is {}",new Object[]{url,JsonUtil.toJson(header),reqJson});
ResponseEntity<T> response =restTemplate.exchange(url, HttpMethod.POST, entity, clazz);
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
/**
*restTemplate 发送post请求
* @param url
* @param reqJson
* @param clazz 返回对象类型
* @return
*/
public <T> T httpPost(String url, String reqJson,Class<T> clazz){
logger.info("httppost request begin ,url is {},requestjson is {}",new Object[]{url,reqJson});
ResponseEntity<T> response =restTemplate.postForEntity(url, reqJson, clazz);
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
/**
* restTemplate 发送post请求form
* @param url
* @param map
* @param clazz
* @param <T>
* @return
*/
public <T> T httpPostForm(String url, MultiValueMap<String, String> map, Class<T> clazz){
logger.info("httppost request begin ,url is {},requestjson is {}",new Object[]{url,JsonUtil.toJson(map)});
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<T> response = restTemplate.postForEntity( url, request , clazz );
logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
return response.getBody();
}
}
//使用例
post:
Map<String, String> result = restTemplateUtil.httpPost(url, null, JsonUtil.toJson(policyDTO), HashMap.class);
Object object = restTemplateUtil.httpPost(mockURL + url, new HashMap(), param, Object.class);
httpPostForm:
MultiValueMap<String, String> params= new
LinkedMultiValueMap<String, String>();
params.add("secretContent", message);
params.add("empNo", benefitRequest.getEmpInfo().getEmpNo());
String url = propertiesService.findOneByKey("Properties", "benefit.background");
return restTemplateUtil.httpPostForm(url, params, BenefitResponse.class);
httpGet:
List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
list.add(new BasicNameValuePair("MainIndex", mainIndex));
String params = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));
String redirecturlNew = obUrl + "?" + params;
String xml = restTemplateUtil.httpGet(redirecturlNew, String.class);