package com.lining.omni.util.http;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.ObjectUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.Map;
import java.util.Set;
/**
* @author chenyuanjie
* @Date 2021.12.10
* restTemplae 请求封装
*/
@Slf4j
public class RestTemplateUtils {
/**
* @author chenyuanjie
* @Description httpPost form 表单提交封装
* @param url 请求地址
* @param map form表单参数 (如果value是list形式,请转化成json存入)
* @param headerMap 封装请求头 (如果value是list形式,请转化成json存入)
* @return
*/
public static String sendPostForm(String url, Map<String, Object> map,MultiValueMap<String,String> headerMap){
String result = "";
RestTemplate restTemplate = new RestTemplate();
// 设置请求头为form表单形式
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpMethod method = HttpMethod.POST;
// 封装请求头
if(!ObjectUtils.isEmpty(headerMap)){
httpHeaders.addAll(headerMap);
}
// 封装请求参数
MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<String, Object>();
if(!ObjectUtils.isEmpty(map)){
for (String key : map.keySet()){
multiValueMap.add(key,map.get(key));
}
}
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(multiValueMap, httpHeaders);
// 请求前打印请求参数
log.info(" request url ----> {}",url);
log.info(" request param ----> {} ", JSONObject.toJSONString(multiValueMap));
// 发送请求
try {
ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, requestEntity, String.class);
log.info( "response message ----> {}",requestEntity );
// 成功返回 200
if(responseEntity.getStatusCode().is2xxSuccessful()){
result = responseEntity.getBody();
}
return result;
}catch (Exception e) {
log.info(" request error ----> {} ",e);
return result;
}
}
/***
* post发送Json形式参数
* @param url 请求地址
* @param json 请求参数
* @param headerMap 请求头参数
* @return
*/
public static String sendPostJson(String url, String json,MultiValueMap<String,String> headerMap){
String result = "";
RestTemplate restTemplate = new RestTemplate();
// 设置请求头
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
// 封装请求头
if(!ObjectUtils.isEmpty(headerMap)){
headers.addAll(headerMap);
}
HttpEntity entity = new HttpEntity(json,headers);
// 请求前打印请求参数
log.info(" request url ----> {}",url);
log.info(" request param ----> {} ", json);
// 发送请求
try {
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST,entity, String.class);
log.info( "response message ----> {}",responseEntity);
// 成功返回 200
if(responseEntity.getStatusCode().is2xxSuccessful()){
result = responseEntity.getBody();
}
return result;
}catch (Exception e) {
log.info(" request error ----> {} ",e);
return result;
}
}
/***
*
* @param url 请求地址
* @param map url后面跟的参数 "?waybillNo={waybillNo}"
* @param headerMap 请求头参数
* @return
*/
public static String sendGet(String url, Map<String, Object> map, MultiValueMap<String,String> headerMap){
String result = "";
RestTemplate restTemplate = new RestTemplate();
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 封装请求头
if(!ObjectUtils.isEmpty(headerMap)){
headers.addAll(headerMap);
}
HttpEntity<String> entity = new HttpEntity<String>(headers);
// 请求前打印请求参数
try {
ResponseEntity<String> responseEntity = null;
if(!ObjectUtils.isEmpty(map)){
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl(url);
Set<String> keys = map.keySet();
for (String name :keys)
{
uriComponentsBuilder.queryParam(name,map.get(name));
}
log.info(" request url ----> {}",uriComponentsBuilder.build().toUri());
log.info(" request url ----> {}",uriComponentsBuilder.build().encode().toUri());
responseEntity = restTemplate.exchange(uriComponentsBuilder.build().encode().toUri(), HttpMethod.GET,entity,String.class);
}else {
log.info(" request url ----> {}",url);
responseEntity = restTemplate.exchange(url, HttpMethod.GET,entity, String.class);
}
log.info( "response message ----> {}",responseEntity);
// 成功返回 200
if(responseEntity.getStatusCode().is2xxSuccessful()){
result = responseEntity.getBody();
}
return result;
}catch (Exception e) {
log.info(" request error ----> {} ",e);
return result;
}
}
}
基于RestTemplate的http请求工具类
最新推荐文章于 2025-05-18 15:43:33 发布