配置类
import java.util.Map;
import com.sep.common.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
@Service
public class HttpRemoteClient {
private Logger logger = LoggerFactory.getLogger(HttpRemoteClient.class);
@Autowired
private RestTemplate restTemplate;
public <T> T getForObject(String url, Map<String, ?> uriVariables, TypeReference<T> type) {
try {
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, null, String.class,
uriVariables);
String body = exchange.getBody();
T t = JSON.parseObject(body, type);
logger.info("调用url={}", url);
return t;
} catch (Exception ex) {
logger.info("调用url={},出错", url, ex);
throw new ServiceException("调用出错");
}
}
public <T> T postForObject(String url, String jsonParam, TypeReference<T> type, String token) {
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(jsonParam, headers);
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
String body = exchange.getBody();
T t = JSON.parseObject(body, type);
return t;
} catch (Exception ex) {
logger.info("调用url={},出错", url, ex);
throw new ServiceException("调用出错");
}
}
}
import java.nio.charset.StandardCharsets;
import java.util.List;
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.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
@Configuration
public class RestTemplateConfig {
@Bean
RestTemplate restTemplate(ClientHttpRequestFactory requestFactory) {
RestTemplate restTemplate = new RestTemplate(requestFactory);
List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
//重新设置StringHttpMessageConverter字符集为UTF-8,解决中文乱码问题
HttpMessageConverter<?> converterTarget = null;
for (HttpMessageConverter<?> item : converterList) {
if (StringHttpMessageConverter.class == item.getClass()) {
converterTarget = item;
break;
}
}
if (null != converterTarget) {
converterList.remove(converterTarget);
}
converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
//加入FastJson转换器
converterList.add(new FastJsonHttpMessageConverter());
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
//单位为ms
//factory.setReadTimeout(20000);
//单位为ms
//factory.setConnectTimeout(10000);
return factory;
}
}
依赖
<!--fastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
调用方式
请求方
import com.alibaba.fastjson.TypeReference;
//获取远程调用工具类
@Autowired
private HttpRemoteClient httpRemoteClient;
//配置的请求路径
@Value("${serviceInfo.fileService}")
private String fileService;
/**
* ceshi
*/
@GetMapping("/ceshi")
@Anonymous
public AjaxResult ceshi() {
try {
Map<String, String> map = new HashMap<>();
//get请求 map为?拼接参数 第三个参数为反馈方返回的参数
AjaxResult ajax = httpRemoteClient.getForObject(fileService + "/file/1136009473560694784", map, new TypeReference<AjaxResult>() {});
System.out.println(ajax+" ==========");
return ajax;
}catch(Exception e){
return AjaxResult.error(e.getMessage());
}
}
反馈方
/**
* 获取文件上传详细信息
*/
@ApiOperation("获取文件上传详细信息")
@GetMapping(value = "/{id}")
@Anonymous
public AjaxResult getInfo(@PathVariable("id") String id) {
return AjaxResult.success(fsFileService.selectFsFileById(id));
}