package com.macro.mall.tiny.common.utils;
import org.springframework.http.*;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* 基于RestTemplate 访问方式的工具类
*
* @author Philip
*/
public class HttpRestTemplateUtil {
private static final int CODE_STATUS = 200;
//获取rest客户端实例
private RestTemplate restTemplate = new RestTemplate();
/**
* RestTemplate 发送 HTTP GET请求
* @return
*/
public JSONObject doHttpGet(String url, JSONObject param){
JSONObject result = null;
try{
//解决乱码问题
List<HttpMessageConverter<?>> messageConverters = this.resolveGarbledCodes();
restTemplate.setMessageConverters(messageConverters);
//设置请求头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity(param, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
result = JSON.parseObject(response.getBody());
}catch(Exception e){
if (e.toString().contains("timed out")) {
throw new ThirdException(EnumThirdCode.E_CONTRACT, "The interface request timed out,please try again.");
}
throw new ThirdException(EnumThirdCode.E_CONTRACT, "Interface exception");
}
//响应正常返回
return result;
}
/**
* RestTemplate 发送 HTTP POST请求
* @param url
* @return
*/
public JSONObject doHttpPost(String url, JSONObject param){
JSONObject result = null;
try{
//解决乱码问题
List<HttpMessageConverter<?>> messageConverters = this.resolveGarbledCodes();
restTemplate.setMessageConverters(messageConverters);
//设置请求头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity(param, headers);
ResponseEntity<String> response = restTemplate.postForObject(url, httpEntity, JSONObject.class);
result = JSON.parseObject(response.getBody());
}catch(Exception e){
if (e.toString().contains("timed out")) {
throw new ThirdException(EnumThirdCode.E_CONTRACT, "The interface request timed out,please try again.");
}
throw new ThirdException(EnumThirdCode.E_CONTRACT, "Interface exception");
}
//响应正常返回
return result;
}
/**
* RestTemplate 发送 HTTP PUT请求
* @param url
* @return
*/
public JSONObject doHttpPut(String url, JSONObject param){
JSONObject result = null;
try{
//解决乱码问题
List<HttpMessageConverter<?>> messageConverters = this.resolveGarbledCodes();
restTemplate.setMessageConverters(messageConverters);
//设置请求头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity(param, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.PUT, httpEntity, String.class);
result = JSON.parseObject(response.getBody());
}catch(Exception e){
if (e.toString().contains("timed out")) {
throw new ThirdException(EnumThirdCode.E_CONTRACT, "The API request timed out,please try again.");
}
throw new ThirdException(EnumThirdCode.E_CONTRACT, "Interface exception");
}
//响应正常返回
return result;
}
/**
* 解决乱码的公共方法
* /
private List<HttpMessageConverter<?>> resolveGarbledCodes(){
//解决乱码问题
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
//移除原来的转换器
messageConverters.remove(1);
//设置字符编码为utf-8
HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
messageConverters.add(1,converter);
return messageConverters;
}
}
Java 基于RestTemplate 发送网络请求
最新推荐文章于 2025-02-27 22:03:36 发布