RestTemplate使用

RestTemplate是Spring框架中的一个类,用于简化发起HTTP请求和处理HTTP响应。它提供了一个高级API,用于与RESTful Web服务进行交互,将创建和配置HTTP连接的复杂性抽象化。

构造方式有两种:

  1. 无法控制超时时间等配置。

RestTemplate template = new RestTemplate();

     2.可以通过参数控制配置。

RestTemplate template = new RestTemplate(ClientHttpRequestFactory requestFactory);

ClientHttpRequestFactory接口有4个实现类:

  • SimpleClientHttpRequestFactory:接口的一个简单实现,可配置proxy,connectTimeout,readTimeout等参数。
  • HttpComponentsClientHttpRequestFactory :允许用户配置带有认证和http连接池的httpclient。
  • AbstractClientHttpRequestFactoryWrapper :用来装配其他request factory的抽象类。
  • CommonsClientHttpRequestFactory :同2,已弃用。

使用步骤

        1、创建配置类(这里也可以不创建,使用最基本的直接new RestTemplate())

RestTemplateConfig配置类

@Configuration
public class RestTemplateTestConfig {

    public static SimpleClientHttpRequestFactory getSimpleFactory() {

        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(1000);
        requestFactory.setReadTimeout(1000);
        return requestFactory;
    }

    public static HttpComponentsClientHttpRequestFactory getHttpComFactory()
            throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {

        // 信任策略        
        TrustStrategy trustStrategy = (x509Certificates, s) -> true;
        // 信任所有服务端的SSL证书        
        SSLContext sslContext = SSLContexts                
                .custom()
                // 配置信任策略                
                .loadTrustMaterial(trustStrategy)
                .build();
        // 创建主机名验证器        
        NoopHostnameVerifier hostnameVerifier = new NoopHostnameVerifier();
        // 创建套接字工厂        
        SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);

        RequestConfig config = RequestConfig                .custom()
                .setConnectTimeout(1000)
                .setConnectionRequestTimeout(1000)
                .setSocketTimeout(1000)
                .build();

        CloseableHttpClient httpClient = HttpClientBuilder                .create()
                .setDefaultRequestConfig(config)
                .setSSLSocketFactory(socketFactory)
                .build();
        return new HttpComponentsClientHttpRequestFactory(httpClient);

    }
}

         2、发送请求

  • 无参GET请求
// url
String url = "http://localhost:8300/*/*/*/getStrTwo";

//方式1、getForEntity
RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
String body = responseEntity.getBody();

//方式2、exchange
RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
ResponseEntity<String> responseEntity = restTemplate.exchange(uri, HttpMethod.GET,null,String.class);


//方式3、getForObject
RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
String object = restTemplate.getForObject(uri, String.class);
  • 有参GET请求
Map<String, Object> map = new HashMap<>();
map.put("name","张三");
map.put("age",19);

//方式1、getForObject
RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
String object = restTemplate.getForObject(url+"?name={name}&age={age}", String.class,map);


//方式2、getForEntity
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url + "?name={name}&age={age}", String.class, map);
String body = responseEntity.getBody();


//方式3、exchange
// 请求头设置,不需要可以直接给null    
HttpHeaders headers = new HttpHeaders();

HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(null, headers);
RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
ResponseEntity<String> responseEntity = restTemplate.exchange(url + "?name={name}&age={age}", HttpMethod.GET,requestEntity,String.class,map);
  • POST请求
public static void restPostTest(){
    // url   
 String url = "http://localhost:8300/*/*/*/getStr";

    // 请求头设置    
HttpHeaders headers = new HttpHeaders();
    headers.set("phone","sfffdd");
    headers.setContentType(APPLICATION_JSON);
    headers.setAccept(Lists.newArrayList(APPLICATION_JSON));
    // 请求体    
RestDto restDto = new RestDto();
    restDto.setAge(20);
    restDto.setName("老刘");
    String requestBody = JSONObject.toJSONString(restDto);

    try {
        RestTemplate restTemplate = new RestTemplate(RestTemplateTestConfig.getHttpComFactory());
        HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, String.class);
        String body = responseEntity.getBody();
        System.out.println(body);
    }catch (Exception e){
        e.printStackTrace();
    }
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值