springboot中使用RestTemplate

一。導入依賴

 pom.xml

  

<dependency> 
            <groupId>org.apache.httpcomponents</groupId> 
            <artifactId>httpclient</artifactId> 
        </dependency>

 

二。springboot引入配置 


package com.jztey.gxdemo; 

import java.nio.charset.Charset; 
import java.security.KeyManagementException; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.util.Iterator; 
import java.util.List; 

import org.apache.http.impl.client.CloseableHttpClient; 
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; 
import org.springframework.http.converter.HttpMessageConverter; 
import org.springframework.http.converter.StringHttpMessageConverter; 
import org.springframework.web.client.RestOperations; 
import org.springframework.web.client.RestTemplate; 

@Configuration 
public class RestConfiguration { 
    @Bean 
    @ConditionalOnMissingBean({RestOperations.class, RestTemplate.class}) 
    public RestOperations restOperations() { 

//        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); 
//        requestFactory.setReadTimeout(5000); 
//        requestFactory.setConnectTimeout(5000); 

        CloseableHttpClient httpClient = null; 
        try { 
            httpClient = HttpClientUtils.acceptsUntrustedCertsHttpClient(); 
        } catch (KeyManagementException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (KeyStoreException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (NoSuchAlgorithmException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); 

        RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory); 

        // 使用 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(new StringHttpMessageConverter(Charset.forName("UTF-8"))); 
        return restTemplate; 
    } 
}

 

由於需要支持https 需要自定義httpclient  注入

 

package com.jztey.gxdemo; 

import org.apache.http.config.Registry; 
import org.apache.http.config.RegistryBuilder; 
import org.apache.http.conn.socket.ConnectionSocketFactory; 
import org.apache.http.conn.socket.PlainConnectionSocketFactory; 
import org.apache.http.conn.ssl.NoopHostnameVerifier; 
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClientBuilder; 
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 
import org.apache.http.ssl.SSLContextBuilder; 
import org.apache.http.ssl.TrustStrategy; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.SSLContext; 
import java.security.KeyManagementException; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.security.cert.CertificateException; 
import java.security.cert.X509Certificate; 

/** 
 * Created by Administrator on 2015/6/8. 
 */ 
public class HttpClientUtils { 

    public static CloseableHttpClient acceptsUntrustedCertsHttpClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { 
        HttpClientBuilder b = HttpClientBuilder.create(); 

        // setup a Trust Strategy that allows all certificates. 
        // 
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { 
            public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 
                return true; 
            } 
        }).build(); 
        b.setSSLContext(sslContext); 

        // don't check Hostnames, either. 
        //      -- use SSLConnectionSocketFactory.getDefaultHostnameVerifier(), if you don't want to weaken 
        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; 

        // here's the special part: 
        //      -- need to create an SSL Socket Factory, to use our weakened "trust strategy"; 
        //      -- and create a Registry, to register it. 
        // 
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); 
        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() 
                .register("http", PlainConnectionSocketFactory.getSocketFactory()) 
                .register("https", sslSocketFactory) 
                .build(); 

        // now, we create connection-manager using our Registry. 
        //      -- allows multi-threaded use 
        PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager( socketFactoryRegistry); 
        connMgr.setMaxTotal(200); 
        connMgr.setDefaultMaxPerRoute(100); 
        b.setConnectionManager( connMgr); 

        // finally, build the HttpClient; 
        //      -- done! 
        CloseableHttpClient client = b.build(); 

        return client; 
    } 

}

 

三.使用

    @Autowired 
    private RestOperations restOperations;

 

    @Test 
    public void testHttpGet(){ 
        String url = "https://internal.api.ehaoyao.com/logistics/v1.1/company"; 

        OauthParam param = new OauthParam(); 
        param.setGrantType("client_credentials"); 
        param.setClientId("02bceec105cd4462b2dadd892fdba943"); 
        param.setClientSecret("fa50ffdbbbf9442f8958e1493e7a1b41"); 
        param.setScope("mall"); 
        String token = oauthService.getToken(param); 
        url=url+"?access_token="+token; 

        Map<String,Object> uriVariables = new HashMap<String,Object>(); 
        uriVariables.put("access_token", token); 
        JSONArray result =  restOperations.getForObject(url, JSONArray.class); 
        System.out.println(result.toString()); 
    }

 

 

--------------

學習視頻

 

複製鏈接,在瀏覽器打開
tomcat源碼解析
https://study.163.com/course/introduction/1209535854.htm

Springmvc源碼解析
https://study.163.com/course/introduction/1209536851.htm

dubbo源碼解析
https://study.163.com/course/introduction/1209648816.htm

源碼悟道tomcat+springmvc解析
https://study.163.com/course/introduction/1209399899.htm

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章