spring boot中RestTemplate的使用

20 篇文章 1 订阅
16 篇文章 0 订阅

这里有一篇博文,感觉讲的不错,值得一看。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();
    }

基本如上,后续有深入在更新。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值