restTemplate工具
package com.intellsite.common.core.utils;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.List;
/**
* @Author: qts
* 解决乱码问题
*/
public class RestTemplateUtil {
private static final RestTemplate restTemplate = new RestTemplate();
private RestTemplateUtil() {
}
public static RestTemplate getInstance() {
//-----此处是 解决乱码 start-----
List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
//移除StringHttpMessageConverter
converterList.remove(1);
HttpMessageConverter<?> converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
//convert顺序错误会导致失败
converterList.add(1, converter);
// FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
// converterList.add(fastJsonHttpMessageConverter);
restTemplate.setMessageConverters(converterList);
//-----此处是 解决乱码 end----------
return restTemplate;
}
}
get和post和delete请求
package com.intellsite.im.util;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.intellsite.common.core.utils.RestTemplateUtil;
import com.intellsite.im.IMConstants;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* desc: IM rest Api 请求工具
*
* @author qts
* @date 2021/12/3 0003 上午 11:09
*/
public class IMRestUtil {
private static final RestTemplate restTemplate = RestTemplateUtil.getInstance();
/**
* im post 请求
* @param contentType
* @param params 请求参数
* @param modelUrl 模块url
* @return
*/
public static JSONObject imPost(String contentType, Map<String, Object> params, String modelUrl) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-LC-Id", IMConstants.APP_ID);
headers.add("X-LC-Key", IMConstants.MASTER_KEY+",master");
if (StrUtil.isNotEmpty(contentType)) {
headers.add("Content-Type", contentType);
}
//MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
HttpEntity<Object> httpEntity = new HttpEntity<Object>(params, headers);
//String urlParams = url + "?params={json}";
ResponseEntity<String> responseEntity = restTemplate.exchange(IMConstants.SERVER_URL+modelUrl, HttpMethod.POST, httpEntity, String.class);
return JSON.parseObject(responseEntity.getBody());
}
/**
* im get 请求
* @param contentType
* @param params 请求参数,没有参数,随便传一个
* @param modelUrl 模块url
* @return
*/
public static String imGet(String contentType, Map<String, Object> params, String modelUrl) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-LC-Id", IMConstants.APP_ID);
headers.add("X-LC-Key", IMConstants.MASTER_KEY+",master");
if (StrUtil.isNotEmpty(contentType)) {
headers.add("Content-Type", contentType);
}
//MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
HttpEntity<Object> httpEntity = new HttpEntity<Object>(null, headers);
//String urlParams = url + "?params={json}";
ResponseEntity<String> responseEntity;
if (params == null) {
responseEntity = restTemplate.exchange(IMConstants.SERVER_URL + modelUrl, HttpMethod.GET, httpEntity, String.class);
} else {
responseEntity = restTemplate.exchange(IMConstants.SERVER_URL+modelUrl, HttpMethod.GET, httpEntity, String.class,params);
}
return responseEntity.getBody();
}
}
/**
* im delete 请求
* @param contentType
* @param params 请求参数,非必传
* @param modelUrl 模块url
* @return
*/
public static String imDelete(String contentType, Map<String, Object> params, String modelUrl) {
// header参数
HttpHeaders headers = new HttpHeaders();
headers.add("X-LC-Id", IMConstants.APP_ID);
headers.add("X-LC-Key", IMConstants.MASTER_KEY+",master");
if (StrUtil.isNotEmpty(contentType)) {
headers.add("Content-Type", contentType);
}
//MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
HttpEntity<Object> httpEntity = new HttpEntity<Object>(null, headers);
//String urlParams = url + "?params={json}";
ResponseEntity<String> responseEntity;
if (params == null) {
responseEntity = restTemplate.exchange(IMConstants.SERVER_URL + modelUrl, HttpMethod.DELETE, httpEntity, String.class);
} else {
responseEntity = restTemplate.exchange(IMConstants.SERVER_URL+modelUrl, HttpMethod.DELETE, httpEntity, String.class,params);
}
return responseEntity.getBody();
}
测试案例
发送get请求: 后面拼接参数的方式
// 请求参数
Map<String, Object> params = new HashMap<String, Object>();
params.put("skip",conversation.getSkip() );// 跳过几条数据
params.put("limit",conversation.getLimit() );// 条数
params.put("where", "{\"m\":\""+conversation.getMembers().get(0)+"\"}");// 指定成员ID
params.put("order","-createdAt" );// 创建时间倒序
String jsonStr = IMRestUtil.imGet(null, params, "请求的url"+"?skip={skip}&limit={limit}&where={where}&order={order}");
发送post请求
// 请求参数
Map<String, Object> params = new HashMap<String, Object>();
params.put("name",conversation.getName() );
params.put("m",conversation.getMembers() );
params.put("unique",conversation.getUnique() );
params.put("attr",conversation.getAttributes() );
JSONObject jsonObject = IMRestUtil.imPost(ContentType.JSON.getValue(), params, "请求的url");
// 请求参数
Map<String, Object> params = new HashMap<String, Object>();
params.put("conversationId",conversationId );
String resultJson = IMRestUtil.imDelete(null, params, "请求的url" + "/{conversationId}");