RestTemplate的使用

RestTemplate的使用

1. restTemplate简介

restTemplate是spring框架提供的,可以简化与restful服务进行交互的过程。可以在服务中方便的调用其他http服务。

2. 使用方法

2.1 配置

写一个配置类bean用于自动注入,将RestTemplate对象丢给spring管理,不需要每次使用的时候都new一个对象出来。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RequestConfig
{
    @Bean
    public RestTemplate restTemplate()
    {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        //设置连接超时时间
        requestFactory.setConnectTimeout(1000);
        //设置读取超时时间
        requestFactory.setReadTimeout(1000);
        return new RestTemplate(requestFactory);
    }
}

在业务代码中请求其他http服务接口需要设置超时时间,不影响后面逻辑的执行。

2.2 Get请求

HttpEntity中的泛型类为请求体的类型,可以放一个自定义的类,用作post请求的body。
ResponseEntity中的泛型类为返回值类型,RestTemplate会将返回值自动转为你定义的类型。

 public String getRequest(Long id, String url){
        String res = "";
        try{
            HttpEntity<String> entity = new HttpEntity<String>(null, jsonHeaders);
            String reqUrl = url + "?id=%s";
            reqUrl = String.format(reqUrl, id);
            /***发送get请求,将返回值转成String类型***/
            ResponseEntity<String> responseEntity = restTemplate.exchange(reqUrl,
                    HttpMethod.GET, entity,  String.class);
            if (responseEntity.getStatusCode().is2xxSuccessful()){
                 //如果请求成功,取到返回值之后写对应的逻辑
            }else{
                logger.error("error");
                
            }
        }catch (Exception e){
            logger.error("query error--", e);
        }
        return res;
    }
2.3 Post请求
    //设置请求头为application/json用于发送post请求
    static {
        jsonHeaders = new HttpHeaders();
        jsonHeaders.setContentType(MediaType.APPLICATION_JSON);
    }

    public List<HotQueryData> listGameSiteHotQuery(String url,HotQueryRequest request) {
        List<HotQueryData> list = new ArrayList<>(0);
        try {
            //HotQueryRequest,HotQueryResponse为自定义的类型
            HttpEntity<HotQueryRequest> httpEntity = new HttpEntity<>(request, jsonHeaders);
            ResponseEntity<HotQueryResponse> rsp = restTemplate.exchange(url, HttpMethod.POST,
                    httpEntity, HotQueryResponse.class);
            logger.info("hotQuery rsp {}", rsp.toString());
            if (rsp.getStatusCode().is2xxSuccessful()) {
                HotQueryResponse response = rsp.getBody();
                if (response != null && response.getData() != null) {
                    list = response.getData();
                }
            } else {
                logger.error("hot query request time out or error");
            }
        } catch (Exception e) {
            logger.info("hotQuery error {}", e);
        }
        return list;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值