这里有一篇博文,感觉讲的不错,值得一看。Spring RestTemplate中几种常见的请求方式。然后我这边业务需要,和其他厂商对接,需要远程调用,就做个备注,以便代码复用和分享。
首先,写个相关的RestTemplate的配置类,
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
// 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver
// 的编码集为"ISO-8859-1")
List<HttpMessageConverter<?>> messageConverters = restTemplate
.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator = messageConverters
.iterator();
while (iterator.hasNext()) {
HttpMessageConverter<?> converter = iterator.next();
if (converter instanceof StringHttpMessageConverter) {
iterator.remove();
}
}
messageConverters.add(0,
new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(120000);// ms
factory.setConnectTimeout(120000);// ms
return factory;
}
}
然后业务代码层,只要注入进来,就可以愉快的使用咯。
@Resource
RestTemplate restTemplate;
关于具体使用,很简单粗暴,无非就是请求地址、请求参数、返回参数。具体以例子说明吧,如下代码:
//MfrsNoticePTHDto,HangupParams是业务需要所自己写的实体,具体根据自己业务需要变更。基本就是构建请求实体参数,aa是请求返回参数
Map<String, String> aa = new HashMap<String, String>();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
HttpEntity<MfrsNoticePTHDto<HangupParams>> entity = new HttpEntity<MfrsNoticePTHDto<HangupParams>>(mfrsNoticePTHDto,headers);
ResponseEntity<String> responseEntity =restTemplate.postForEntity(requestUrl, entity, String.class,aa);
responseEntity.getBody();
完整代码如下,根据自己业务需求更改即可:
public String enforceHangUp(String micId){
ResultData<String> resData = new ResultData<String>();
String requestUrl= "http://111.111.111.111/ms-service/action";
if(null==micId || micId.isEmpty()){
logger.info("micId传参为空");
resData.setMsg("失败,请检查传参是否为空!");
resData.setStatus(false);
return resData.toString();
}
try{
Map<String, String> aa = new HashMap<String, String>();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
MfrsNoticePTHDto<HangupParams> mfrsNoticePTHDto = new MfrsNoticePTHDto<>();
mfrsNoticePTHDto.setJsonrpc("2.0");
mfrsNoticePTHDto.setMethod("bye");
HangupParams hangupParams = new HangupParams();
hangupParams.setMicId(micId);
mfrsNoticePTHDto.setParams(hangupParams);
logger.info(JSON.toJSONString(mfrsNoticePTHDto));
HttpEntity<MfrsNoticePTHDto<HangupParams>> entity = new HttpEntity<MfrsNoticePTHDto<HangupParams>>(mfrsNoticePTHDto,headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(requestUrl, entity, String.class,aa);
responseEntity.getBody();
}catch(Exception e){
e.printStackTrace();
logger.info("失败,请检查传参是否正确及友商是否能正常提供服务!");
resData.setMsg("失败,请检查传参是否正确及友商是否能正常提供和服务!");
resData.setStatus(false);
return resData.toString();
}
resData.setMsg("成功");
resData.setStatus(true);
return resData.toString();
}
基本如上,后续有深入在更新。。