三三良良

不忘初心,方得始终

spring boot中RestTemplate的使用

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

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35033270/article/details/79952599
文章标签: RestTemplate
个人分类: springboot Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

spring boot中RestTemplate的使用

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭