Insight spring RestTemplate

原创 2018年01月03日 17:07:57

insight spring 提供的rest操作,以及jdk自带URL http访问的实现。

spring RestTemplate 执行流程

/**
 * http请求,根据指定的方法访问URI
 * @param requestCallback write请求对象至 request。借助HttpMessageConverter 组件,转换对象,如json的序列化
 *      类比前端ajax请求,JSON.stringify(request)
 * @param responseExtractor 从response 解析返回值。responseExtractor 封装HttpMessageConverter 组件,用以转换response,比如json的反序列化。
 *      new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
 */
protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor) {
    try {
        // 1.构造request (open a connection, set timeout...)
        ClientHttpRequest request = createRequest(url, method);
        if (requestCallback != null) {
            // 2.序列化request,write bytes to request body
            requestCallback.doWithRequest(request);
        }
        // 3.check、connect,构造response
        response = request.execute();
        // 4.handle error
        handleResponse(url, method, response);
        if (responseExtractor != null) {
            // 5.解析、反序列化response
            return responseExtractor.extractData(response);
        }
    } catch (IOException ex) {
        // ......
    } finally {
        // 6.切记close InputStream
        if (response != null) {
            response.close();
        }
    }
}

JDK 自带URL实现的http访问
对应上述的执行流程,JDK URL的具体操作

/*
 * createRequest 实现
 */
// 根据url协议创建对应的URLConnection,不会真正的建立网络连接.
URLConnection connection = (HttpURLConnection) url.openConnection();
// A timeout of zero is interpreted as an infinite timeout.
connection.setConnectTimeout(this.connectTimeout);
connection.setReadTimeout(this.readTimeout);
connection.setDoInput(true);
// 如果是POST、PUT、PATCH、DELETE方法,需要enable output
connection.setDoOutput(true);
// 默认方法是GET.
connection.setRequestMethod(httpMethod);
/**
 * request.execute 实现
 */
connection.setRequestProperty("Cookie", headerValue);
connection.addRequestProperty(headerName, actualHeaderValue);
// 构造Response,responseBody = connection.getInputStream()
new SimpleClientHttpResponse(connection)
版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring提供RestTemplate用于访问Rest服务的客户端实践

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编...
  • zmx729618
  • zmx729618
  • 2017年06月06日 09:22
  • 2416

Spring RestTemplate的使用(解决put,delete方法无返回值问题)

Spring提供了RestTemplate,可以利用RestTemplate调用REST资源。 同时也可以用作服务端到服务端发送请求。 在Java后台开发中,也可以使用RestTemplate来测...
  • u010180738
  • u010180738
  • 2017年03月11日 23:03
  • 4092

基于AsyncRestTemplate异步HTTP请求的一种轻量级技术实现

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/51428562Ⅰ、前言          在上一篇博客中讲述...
  • pistolove
  • pistolove
  • 2016年05月16日 21:50
  • 14819

Spring RestTemplate

  • 2010年11月28日 09:50
  • 1007KB
  • 下载

Spring中使用RestTemplate调用第三方接口API

Spring中使用RestTemplate调用第三方接口API 将其json内容转换为程序中需要的对象...
  • u013905744
  • u013905744
  • 2017年06月14日 17:18
  • 1555

使用spring RestTemplate进行rest接口测试

使用spring RestTemplate进行rest接口测试 Rest 代表性状态传输(Representational State Transfer,REST)。 由于约定大于配置的...
  • z69183787
  • z69183787
  • 2017年07月03日 16:07
  • 680

spring RestTemplate用法详解

前面介绍过Spring的MVC结合不同的view显示不同的数据,如:结合json的view显示json、结合xml的view显示xml文档。那么这些数据除了在WebBrowser中用JavaScrip...
  • wwwihpccn
  • wwwihpccn
  • 2014年06月13日 16:07
  • 156118

如何使用 Spring RestTemplate

什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写...
  • bigtree_3721
  • bigtree_3721
  • 2017年06月05日 13:45
  • 844

spring的RestTemplate

参考资料:spring-framework-reference: 1.Accessing RESTful services on the Client 2.Bean scopes下的Session s...
  • xiejx618
  • xiejx618
  • 2015年02月12日 16:52
  • 6256

Spring框架中发送http请求--RestTemplate

环境搭建 本文环境指的 Spring Boot下1.4.2版本下 pom.xml (核心内容) parent> groupId>org.springframework.bo...
  • u014430366
  • u014430366
  • 2017年03月24日 17:14
  • 8901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Insight spring RestTemplate
举报原因:
原因补充:

(最多只允许输入30个字)